2012-07-10 25 views
65

私はPHPで匿名関数を使って遊んでいましたが、それらが外部変数に到達していないように見えました。 この問題を回避する方法はありますか?匿名関数のphp変数

例:

$variable = "nothing"; 

functionName(someArgument, function() { 
    $variable = "something"; 
}); 

echo $variable; 

ウィル出力: "何もありません"。無名関数が$変数にアクセスする方法はありますか?

答えて

168

はい、use a closure

functionName(someArgument, function() use(&$variable) { 
    $variable = "something"; 
}); 

あなたが$variableを変更し、匿名関数のスコープの外で変更された値を取得することができるようにするために、それは&を使用して閉鎖で参照する必要があることに注意。

+1

恐ろしい!以前は見たことがありません.. =) – einord

+0

新しいです!これはPHP 5.3で新しく書かれた構文です。 –

+1

@Rocketそれで、公正であるためには、(create_function()とは対照的に)真の無名関数構文であり、 'use'キーワードは[同じ文書ページ](http:// php。 net/manual/en/functions.anonymous.php)を参照してください。 – DaveRandom