PHPでクロージャ
試してみた。
<?php function c(){ $x = 1; return function () { print $x++."\n"; }; } $func = c(); $func(); $func();
と書くと
PHP Notice: Undefined variable: x in file line x
で変数のxのスコープが当たらない。
なるほどuse句を使うのか
<?php function c(){ $x = 1; return function () use($x) { print $x++."\n"; }; }
実行
1 1
あれ、変数がそのまま値渡しになっている。
こーするのか。
<?php function c(){ $x = 1; // use ( &reference ) return function () use(&$x) { print $x++."\n"; }; }
1 2
以上。