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?
versuchen, neue $ action zu ersetzen; mit neuem $ actionType(); – stweb
@stweb erstellt keine Instanz einer Klasse ohne Klammern eine kurze Hand, um keine Parameter an den Konstruktor zu übergeben? – feareoc
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