Holen Sie sich alle public deklarierten Methoden in der Klasse, nicht geerbt
Was ich will ist das array aller public-Methoden, und NUR öffentliche, die, von den untersten Klassen in der vererbungsstruktur. Zum Beispiel:
class MyClass { }
class MyExtendedClass extends MyClass { }
class SomeOtherClass extends MyClass { }
Ist, und von innen von MyClass möchte ich, um alle ÖFFENTLICHEN Methoden von MyExtendedClass und SomeOtherClass.
Dachte ich, ich verwenden können, Reflexion-Klasse dies zu tun, aber wenn ich das mache, bekomme ich auch Methoden aus der MyClass, und ich will nicht, um Sie zu bekommen:
$class = new ReflectionClass('MyClass');
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
Gibt es eine Möglichkeit, dies zu tun? Oder die einzige Lösung, die ich haben in dieser situation nur heraus zu filtern, die Ergebnisse der Reflexions-Klasse?
- Ich denke, Sie müssen sich selbst eine Hilfsfunktion, bekommt alle Oberklassen und bekommt Ihre öffentlichen Methoden.
- Sie sind nicht öffentlich-Methode in diese Klasse ....
- Nicht direkt, aber man kann leicht filtern der Ergebnisse, da die Namen der Klassen, zu denen Sie gehören, sind da.
- stackoverflow.com/questions/9471883/...
- Warum nicht einfach die Kreuzung von MyClass' öffentliche Funktionen und diejenigen, die Derivate?
- Sie verwenden könnten:
$methods = array_filter($class->getMethods(ReflectionMethod::IS_PUBLIC), function ($o) use ($class) {return $o->class == $class->getName();});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, ich glaube nicht, können Sie herauszufiltern, die übergeordneten Methoden auf einmal. Aber es wäre sehr einfach, zu einfach die Ergebnisse filtern, indem Sie die Klasse index.
$classname
aus ????if ($method['class'] == __CLASS__)
oder irgendwo definiert.__CLASS__
wird nicht funktionieren, wenn Sie dies tun, die außerhalb der selbst-Kontext.$method->class
und$method->name
Schrieb ich einfach eine Methode mit einigen zusätzlichen Funktionalität erweitert, dass auf Daniels Antwort.
Es ermöglicht Ihnen die Rückgabe statischer oder Objekt-Methoden nur.
Es erlaubt Ihnen auch, um nur zurückzukehren Methoden wurden in dieser Klasse definiert sind.
Versorgung Ihres eigenen Namensraums oder kopieren Sie einfach die Methode.
Beispiel:
Code:
Hatte ich das Bedürfnis, das gleiche zu tun und kam mit der folgenden Funktion:
Anhand der folgenden test-code in Father.php und Child.php
Gibt die folgenden: