php - Überprüfen Sie, ob der in einer Zeichenfolge gespeicherte Klassenname eine Schnittstelle implementiert

8

Ich verstehe, dass meine Frage irgendwie falsch ist, aber ich versuche immer noch, dieses Problem zu lösen.

Ich habe eine Schnittstelle Programmer :

%Vor%

und ein paar namespaced Klassen:

  • Students\BjarneProgrammer (implementiert Programmer )
  • Students\CharlieActor (implementiert Actor )

Ich habe diese Klassennamen im Array $students = array("BjarneProgrammer", "CharlieActor");

gespeichert

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.

    
Stichoza 24.11.2013, 00:50
quelle

2 Antworten

12

Sie können class_implements (erfordert PHP 5.1.0 )

verwenden %Vor%

Sie können class name als String als Argument der Funktion übergeben. Sie können auch Reflection

verwenden %Vor%

Update: (Sie können so etwas versuchen)

%Vor%

Funktion, die instanse/false

überprüft und zurückgibt %Vor%

Erhalte eine Instanz oder false

%Vor%     
The Alpha 24.11.2013, 01:10
quelle
10

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() :

%Vor%

Beide werden wahr zurückgeben.

    
ircmaxell 24.11.2013 13:00
quelle

Tags und Links