2011-07-21 20 views
6

可能性の重複:これはPHPでは不可能であるのはなぜ
Calling closure assigned to object property directly無名関数

?私は特定のオブジェクトのためにオンザフライで関数を作成できるようにしたい。

$a = 'a'; 
$tokenMapper->tokenJoinHistories = function($a) { 
    echo $a; 
}; 
$tokenMapper->tokenJoinHistories($a); 
+0

このコードから得られるエラーは何ですか? – Nobody

答えて

0

$obj->foo()を使用すると、メソッドを呼び出していますが、関数/メソッドとしての性質を呼びたいです。これは、名前がfoo()のメソッドを見つけられなかったためパーサを混乱させるだけですが、何らかのプロパティを呼び出し可能なものにすることは期待できません。

call_user_func($tokenMapper->tokenJoinHistories, $a); 

やPHPではない「tokenJoinHistories」と呼ばれるインスタンスメソッドを一致させようと

2

あなたは

class Bar { 
    public function __call ($name, $args) { 
    if (isset($this->$name) && is_callable($this->$name)) { 
     return call_user_func_array($this->$name, $args); 
    } else { 
     throw new Exception("Undefined method '$name'"); 
    } 
    } 
} 

(この迅速書かれた例内のいくつかの問題は、おそらくあります)のようなあなたのマッパーを拡張元のクラスで定義されています。

$anon_func = $tokenMapper->tokenJoinHistories; 
$anon_func($a); 

特に、コメント部分hereをお読みください。

関連する問題