2016-06-15 16 views
1

私は、$actionという変数を持つクラスを持っています。私はこのような何かを行うことによって関数を呼び出します呼び出すことなく変数に呼び出すことができる

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

$this->action(); 

クラス自体は、次のようになります。

この値を初期化するとき、通常、私はこのような何かを行うことができます
<?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; 
    } 
} 

resolveCallable()関数では、$results変数の結果によって別のオブジェクトのメソッドによってアクションを解決する必要があります。このメソッドはActionResolverクラスにあります。この方法は、次のようになります。

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() {}; 
} 

$results変数から取得した文字列によって解決する方法とクラスのgetの。クラスとメソッドの名前は有効であり、動作しています。

私はこれを呼び出そうとすると、メソッドからの戻り値を返しますが、メソッド自体は返しません。

メソッドの内容ではなく、メソッド自体を呼び出すことなく、そのメソッド自体を返すことはできますか?

+0

は非常に正直、このビットが入り組んであります。簡単な例に煮詰めることができますか? – deceze

+0

私はそれを本当に単純化できません。それは、クラスメソッドからコール可能なコールバックを返すことです。 – Bas

+0

私が最も不明なことは、3つの大きなコードスニペットがどのくらい正確に合っているかです。 – deceze

答えて

0

値を返します。

代わり

return $class->$method(); 

使用

return $class->$method; 
関連する問題