2016-06-15 14 views
1

Ich habe eine Klasse, die eine $action Variable hat, die eine abrufbare wie es Wert ist. Normalerweise, wenn Sie diesen Wert zu initialisieren, könnte ich so etwas tun:Aufrufen einer Callable in eine Variable ohne sie aufzurufen

$this->action(); 

Die Klasse selbst sieht wie folgt aus:

$this->action = function() { 
    echo "My function"; 
} 

ich dann die Funktion, indem Sie so etwas wie dies nennen würde

<?php 

/** 
* Resolves an non-callable action 
*/ 
class ActionResolver 
{ 
    private $action; 

    /** 
    * Action constructor. 
    * 
    * @param string $action 
    */ 
    public function __construct($action) 
    { 
     $this->action = $action; 
    } 

    public function resolve() 
    { 
     $actionResolver = new ActionResolver(); 
     $results = ... 
     $this->action = $actionResolver->resolveCallable($results); 
    } 

    /** 
    * @return callable 
    */ 
    public function getAction() 
    { 
     return $this->action; 
    } 
} 

In der resolveCallable()-Funktion sollte die Aktion durch die Methode eines anderen Objekts durch die Ergebnisse der Variablen $results aufgelöst werden. Diese Methode ist in der ActionResolver Klasse. Das Verfahren sieht wie folgt aus:

public function resolveCallable(array $results) 
{ 
    $class = $results[0]; 
    $method = null; 
    if (isset($results[1])) { 
     $method = ... 
    } 

    $object = new $class; 
    if (!is_null($method)) { 
     return $class->$method(); 
    } 
    return function() {}; 
} 

Das Verfahren und die Klasse erhalten, indem eine von der $results Variable genommen Zeichenfolge aufgelöst. Der Name der Klasse und der Methode sind gültig und funktionieren.

Wenn ich versuche, dies aufzurufen, gibt es den Rückgabewert der Methode zurück, aber nicht die Methode selbst.

Wie kann ich die Methode selbst anstelle des Inhalts der Methode zurückgeben, ohne sie aufzurufen?

+0

Ganz ehrlich, das ist ein bisschen gewunden. Kannst du es auf ein einfacheres Beispiel herunterkochen? – deceze

+0

Ich kann es nicht wirklich vereinfachen. Es gibt eine Calling-Funktion, die von einer Klassenmethode abrufbar ist. – Bas

+0

Was mir am meisten unklar ist ist, wie genau Ihre drei großen Code-Schnipsel zusammenpassen. – deceze

Antwort

0

Nur Rückgabewert.

Statt

return $class->$method(); 

Verwendung

return $class->$method; 
Verwandte Themen