上級 › クロージャの use($var) は値をコピーする(参照ではない) › パターン2
クロージャの use($var) は値をコピーする(参照ではない)
無名関数でuse($var)と書くと、その時点の$varの値がコピーされてクロージャに閉じ込められます。
1 <?php 2 $counter = 0; 3 $increment = function() use (____________) { ^ 4 $counter++; 5 return $counter; 6 }; 7 echo $increment(); 8 echo $increment(); 9 echo "\n" . $counter;
出力: 11
0期待:
12
2 (エラーにはなりません)
空欄を埋めて実行を通す
use ($counter)はコピーされた値をクロージャの中だけで増やし続けるため、毎回1からではなく前回の呼び出し結果を引き継ぎますが、外側の$counterは0のままです。&を付けて参照で渡すと外側とも同期します。
次の問題