無名関数のPHP変数


119

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

例:

$variable = "nothing";

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

echo $variable;  //output: "nothing"

これは「何も」を出力しません。無名関数がアクセスできる方法はあります$variableか?

回答:


277

はい、クロージャーを使用します

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

$variable無名関数のスコープ外で変更された値を変更および取得できるようにするには、を使用してクロージャで参照する必要があることに注意してください&


それは新しい!これは、PHP 5.3の新しい構文です。
ロケットHazmat

1
@Rocketつまり、公平に言えば、真の無名関数の構文が(とは対照的にcreate_function())あり、useキーワードはそれらを説明している同じドキュメントページに(不適切に)ドキュメント化されています。
DaveRandom

4
知らない人のためのクイックノート:&オブジェクトは常に参照によって渡されるため、オブジェクトを渡すときにをドロップできます。また、タイプヒントを忘れないでください:)例:function() use (PDO $pdo) {
keyboardSmasher

@Alliswellいいえ、それはオブジェクト専用です。それ以外の場合は、変数を変更するために参照渡しする必要があります。この例を参照してください。
nickb 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.