PHP5.5でcall_user_funcとuse構文の組み合わせに注意する

PHPのバージョンを上げた際に発覚した問題。

$array   = explode('-', $keyword);
$price = call_user_func(function () use ($array) {
});

こんな感じの使い方している場合、 call_user_funcがうまく実行されずに、$priceが定義されない。

$array   = explode('-', $keyword);
$price = call_user_func(function () use (&$array) {
});

この場合、call_user_funcuse構文にアンパサンドをつけて参照渡しにしないとだめだった。

手前で定義している$arrayを参照したいか、
引数として関数実行時に$arrayを期待するかで挙動が変わるっぽいのかな・・?

本来これが正しい挙動なのだろうけど、バージョンを上げる前は普通に動いていたのが怖い・・・
バグに依存した実装・・・

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)