2016-08-21 1 views
0

Hier ist eine Methode, in der eine Zeichenfolge übergeben wird, unter Verwendung der Zeichenfolge, die eine Instanz erstellt wird. Beispiel Methode:Klasse nicht gefunden, wenn versucht wird, den Klassennamen als Zeichenfolge zu übergeben, Namespace-Problem

public function action($actionType) 
{ 
    //var_dump(new $actionType); 

    if (!class_exists($actionType)) { 
     //throw new Exception 

    } 

    if (!(new $actionType) instanceof ActionInterface) { 
     ////throw new Exception 
    } 
    $actionType = new $actionType; 
    echo $actionType->doAction(); 
} 

Aber ich einen Fehler der Klasse immer nicht jedoch gefunden, wenn ich den Klassennamen manuell schreiben oder manuell den Namespace auf diese Weise $actionType = __namespace__ . "\\$actionType"; anhängen, dann geht die Fehler. Warum passiert das?

+1

versuchen, neue $ action zu ersetzen; mit neuem $ actionType(); – stweb

+0

@stweb erstellt keine Instanz einer Klasse ohne Klammern eine kurze Hand, um keine Parameter an den Konstruktor zu übergeben? – feareoc

+0

Außerdem würde ich den $ actionType = new $ actionType; zwischen den if-Anweisungen setzen, um zu vermeiden, dass zwei Instanzen erstellt werden. In der letzten if-Anweisung würden Sie Folgendes tun: 'if (! $ ActionType instanceof ActionInterface) {}' – feareoc

Antwort

0

Versuchen Sie folgendes:

public function action($actionType) { 
    //var_dump(new $actionType); 
    if (!class_exists($actionType)) { 
     //throw new Exception 
    } 
    $actionType = new $actionType; 
    if (!($actionType instanceof ActionInterface)) { 
     ////throw new Exception 
    } 

    echo $actionType->doAction(); 
} 
+0

das macht keinen Unterschied. – harry123

Verwandte Themen