◆ 再帰関数の use には & が必要
◆ use には全部 & 付けていいと思う 

PHPのスコープが使いづらいのはいつものことですが こんなところでも使いづらいことになってました

再帰関数を無名関数で定義します
$recur = function ($n) use($recur){
if($n <= 1) return $n;
return $recur($n-1) + $n;
};
echo $recur(5);

実行してみるとエラーです
Fatal error: Function name must be a string in .......

全く問題はない用に見えますよね



ですが 実はこれが正しい書き方なんです
$recur = function ($n) use(&$recur){
if($n <= 1) return $n;
return $recur($n-1) + $n;
};
echo $recur(5);
use$recur には & をつけておかないといけません
use は定義時の値に決まってしまうようで & がないとまだ $recur には値がない状態なので この無名関数ないでの $recur NULL となります

そのせいで $recur(5) をしたときに $recur($n-1) $recur が実行できずにエラーになります
& をつけることで 参照になるので $recur を実行したときの $recur つまり 自分自身を使って再帰呼び出しができるようになります

罠すぎです

use
は全部 & になる仕様でいいのに なぜこんな仕様なんですか!
& ついてるのが 他の言語と同じ動きになるはずなので とりあえず use には全部 & 付ける勢いでいいと思います