2012-01-31 7 views
5

可能性の重複:
Immediately executing anonymous functions私はすぐに無名関数を評価できますか?

私はすぐにそれがメソッドの引数でクロージャオブジェクトとして表示されるのではなく、匿名の機能を評価したい

。これは可能ですか?

例えば:

$obj = MyClass; 
$obj->Foo(function(){return "bar";}); // passes a Closure into Foo() 
$obj->Foo(function(){return "bar";}()); // passes the string "bar" into Foo()? 

3行目は不正な構文である - これを実行する方法はありますか?あなただけの変数に代入し、その後、変数を呼び出すことができたときに少し愚かかもしれませんが

おかげ

+0

これを行う必要があるのは想像もしません。関数の結果を変数に代入し、その変数を代わりに渡すのはなぜですか? –

+0

また、これらの例では、関数はちょうど匿名関数であり、クロージャの特性を持たず、現在のコンテキストから変数を覚えていません –

+1

私はそれを実現していますこれを行うには - 明らかにそれは異常な状況です。 – Tom

答えて

2

あなたは... call_user_funcでそれを行うことができます。

call_user_func(function(){ echo "bar"; });

あなたはそれでPHP 5.4は機能が、これが可能になるだろう逆参照だと思うかもしれません。しかし、あなたは間違っているでしょう(とにかくRC6のように)。

+0

なぜあなたはそれを愚かだと考えますか? – Tadeck

+0

@Tadeckまあ、 '$ f = function(){echo '1';}を簡単に行うことができるときには、' call_user_func'への追加の関数呼び出しを実行するのは意味がありません。 }; $ f(); 'この場合には' call_user_func'の使用に関して技術的に不利益は何もありませんが、私は明示的な呼び出しを読みやすくしています。私は 'call_user_func'で一行の簡潔さを訴えることができます。 – rdlowrey

関連する問題