PHPで関数を変数に代入することができると、最近知りました。
こんな感じで使えます。
$func = function() {
echo 'hello';
}; // 変数の右辺なので、「;」が必要っぽい
$func(); // hello
お、これはもしかして、JavaScriptにあるようなクロージャもできるのでは?と思ったのですが・・・。
$func = function() {
$x = 0;
return function() use($x) {
return ++$x;
};
};
$func2 = $func();
echo $func2(); // 1
echo $func2(); // 2かと思いきや、1
echo $func2(); // 3かと思いきや、1
echo $func2(); // 4かと思いきや、1
あれー?(´・ω・`)
ちょっと調べたところ、マニュアルの無名関数のところに、
引き継がれた変数の値は、関数が定義された時点のものであり、
関数が呼ばれた時点のものではありません
とあったので、できないっぽいです。
追記:
@mpywさんのコメントにより、動かすことができました!ありがとうございます!!
動いたコードはこんな感じです。
$func = function() {
$x = 0;
return function() use(&$x) {
return ++$x;
};
};
$func2 = $func();
echo $func2(); // 1
echo $func2(); // 2
echo $func2(); // 3
そうかー、ポインタ渡せば良かったのかー・・。
コメントにある@mpywさんのコードのほうがシンプルなので、そちらも参考にすると良いと思います。