PHPで関数を返す関数を呼んで関数を呼びたかった(即時実行)
関数を返す関数を変数に入れて、直接呼びたい。
<?php $f = function ($x) { return function ($y) use ($x) { return $x + $y; }; }; echo $f(123)(234); //=> 357
PHP7
問題なし。
PHP5.6
syntax error, unexpected '('
怒られた。
他の動かない例
括弧したり変数に入れたり。
<?php echo ($f(123))(234); // syntax error, unexpected '(' echo ($f2 = $f(123))(234); // syntax error, unexpected '('
動いた例
変数に一旦入れた後、改めて呼べばいいんだけど、なんだか悔しい。
<?php $f2 = $f(123); echo $f2(234);
先輩PHPerからの教えによれば__invoke()を使えばいいとのこと。
<?php echo $f(123)->__invoke(234);
なるほど。(よくわからないけど動いた感)
見た目があれだけど、call_user_func()でも動くらしい。
<?php echo call_user_func($f(123), 234);