0

関数ヘッダーでパラメーターが指定されている場合にのみ、php 匿名関数が機能する理由を理解しようとしています。

例えば

$f = function(){
    echo "hello world";
};
$f;
$f();

動作しません。しかし

$f = function($argument){
    echo $argument;
}
$f('hello world');

うまく動作します。

なぜ引数が必要なのですか?これに対する回避策はありますか?

編集

これはバージョンの問題に違いありません。私は 5.3.18 を使用していますが、最初の例は確実に機能しません。信じていない人のために、それはスローします:

Parse error: syntax error, unexpected T_FUNCTION in index.php(192) : 
  eval()'d code on line 1

編集

DaveRandom's answer を見た後、何が起こっているのかわからない状態に戻りました。それは、5.3.10で動作することが正しい場合です...

4

3 に答える 3

5

これは完全に有効な構文であり、次のように出力されますhello world

$f = function(){
    echo "hello world";
};
$f();

この行$f;は何もしません。他の変数を宣言してから、その新しい変数名とセミコロンを書き込むのと同じです。

匿名関数はパラメーターを必要としません。それらの詳細については、マニュアルを参照してください。

PHPバージョン<5.3を実行しているため、これらの構文エラーが発生します。

于 2012-06-22T00:25:57.443 に答える
4

これはクロージャを呼び出しません:

$f;

しかし、これはします:

$f();

関数呼び出しでは、パーサーがパーレンを認識する必要があります。変数について言及するだけなら、$f;それは空の式です。に含まれるクロージャーオブジェクトは$f、一時的なzval(可変プレースホルダー)に割り当てられてから破棄されます。

于 2012-06-22T00:27:06.953 に答える
3

意味のない行を削除すると、最初のコードは正常に機能$f;します。

編集実際には、その行を残しても機能します。5.3.10でも同様です。

于 2012-06-22T00:26:15.627 に答える