Ich verstehe, dass meine Frage irgendwie falsch ist, aber ich versuche immer noch, dieses Problem zu lösen.
Ich habe eine Schnittstelle Programmer
:
und ein paar namespaced Klassen:
Students\BjarneProgrammer
(implementiert Programmer
) Students\CharlieActor
(implementiert Actor
) Ich habe diese Klassennamen im Array $students = array("BjarneProgrammer", "CharlieActor");
Ich möchte eine Funktion schreiben, die eine Instanz der Klasse zurückgibt, wenn sie Programmer
interface implementiert.
Beispiele:
getStudentObject($students[0]);
- Es sollte eine Instanz von BjarneProgrammer
zurückgegeben werden, da Programmer implementiert wird.
getStudentObject($students[1]);
- Es sollte false
zurückgeben, da Charlie kein Programmierer ist.
Ich habe es mit instanceof
operator versucht, aber das Hauptproblem ist, dass ich nicht ein Objekt instanziieren möchte, wenn es Programmierer nicht implementiert.
Ich habe geladen PHP-Code dynamisch und prüfen, ob Klassen Schnittstelle implementieren , aber es gibt keine passende Antwort, wie ich nicht Objekt erstellen möchten, es sei denn, es wird von Funktion zurückgegeben.
Sie können class_implements (erfordert PHP 5.1.0
)
Sie können class name
als String als Argument der Funktion übergeben. Sie können auch Reflection
Update: (Sie können so etwas versuchen)
%Vor% Funktion, die instanse/false
Erhalte eine Instanz oder false
%Vor% Wenn Sie eine moderne Version von PHP (5.3.9+) verwenden, dann wäre der einfachste (und beste) Weg, % co_de zu verwenden % mit dem dritten Parameter is_a()
:
Beide werden wahr zurückgeben.
Tags und Links php namespaces oop