2016-04-14 16 views
0

Ich habe eine Funktion wie:PHP: mit dem Klassennamen als Variablenname

public function controller_instance($controller_name) 
{ 
     $controller = Router::getRequestedController(); 
     return $controller instanceof $controller_name; 

} 

und ich rufe die Funktion als controller_instance('IndexController').

Dies gibt immer false zurück, da die Variable $controller_name die Zeichenfolge IndexController enthält.

Wie kann ich das schaffen?

+0

Was 'Router tut :: getRequestedController() 'zurück? –

Antwort

2

So stellen neue Klasse von diesem Controller String

return $controller instanceof (new $controller_name()); 
0

Sie eine Instanz oder boolean erwarten sind?

eine Array-Eigenschaft in der gleichen Klasse machen, wo die Methode controller_instance und speichern enthält alle Instanzen

private $controllers = array(); 

public function controller_instance($controller_name) 
{ 
    if (isset($this->controllers[$controller_name])) { 
     return $this->controllers[$controller_name]; 
    } 
    return $this->controllers[$controller_name] = new $controller_name(); 
} 

Exemple 2: Verwendung von Reflection und Argumente

private $controllers = array(); 

public function controller_instance($controller_name, Array $args = array()) 
{ 
    if (isset($this->controllers[$controller_name])) { 
     return $this->controllers[$controller_name]; 
    } 

    $class = new ReflectionClass($controller_name); 

    $instance = $class->newInstanceArgs($args); 

    return $this->controllers[$controller_name] = $instance; 
} 
Verwandte Themen