4

PHP 5.3.15 (OSX 上のカスタム apache/php/mysql スタック) をローカルで実行しており、次のコードを使用しています。これは問題なく動作します。

$my_closure = function($something, $other) use (&$foo, $bar) {
  // watcha doin'? ... stuff.
};

$my_closure('hello', array('one', 'two'));

同僚が PHP 5.4.x で MAMP を使用しており、クロージャー呼び出しで「関数名は文字列でなければなりません」というエラーが発生しています ( $my_closure(...);)。

call_user_func()またはを使用してこれを回避できますcall_user_func_array()が、このコードが 5.4.x で機能しなくなった理由を知りたいです。これは 5.4.x での変更か、MAMP の問題だと思います (私の経験では、可能性が高いです!)。

php.net には、クロージャーを使用しているのと同じ方法で呼び出し可能な配列を使用できないことについて説明している、多少関連するバグ レポートがあります。バグのコメントは、私が行っていることが 5.3 で正常に動作することを確認しており、5.4 での呼び出し可能配列機能の実装についても言及しています。おそらく実装が回帰バグを導入したのでしょうか? 詳細/提案をいただければ幸いです。

はい、Vagrant を使用してチームの全員が同じ環境を持てるようにしたいと思っていますが、残念ながらさいころはありません。

4

2 に答える 2

0

友人に 5.4 を実行していることを再確認してもらいます。あなたの構文は、5.3 と 5.4 の両方で完全に問題ありません (そして、PHP の将来のバージョンはあえて言えません)。

ここで PHP 5.4 でコードをテストできます(echo phpversion();実際に 5.4 であることを確認するために実行します)。ご覧のとおり、エラーは発生しません。

于 2013-09-09T12:22:53.447 に答える