1

私は PHP 5.3 用のコードをいくつか書いていますが、以下に示すコードと同様のことをしたいと考えていました。このコードは 'hellohello' を出力するはずですが、代わりに 'hello' を出力し、エラーが発生します。

$inner クロージャーは、外部関数のパラメーターにアクセスできないようです。これは正常な動作ですか?PHPのバグですか?それがどのように正しい動作と見なされるのかわかりません...

<?php

function outer($var) {

  print $var;

  $inner = function() {
    print $var;
  };
  $inner();
}

outer('hello');

ありがとう!

4

2 に答える 2

5

useキーワードを使用する必要があります。詳しくはこちらをご覧ください。

ウィキペディアにはこれについての説明があります

function getAdder($x)
{
    return function ($y) use ($x) {
        return $x + $y;
     };
}

$adder = getAdder(8);
echo $adder(2); // prints "10"

ここで、getAdder() 関数は、パラメーター $x を使用してクロージャーを作成し (キーワード「use」は、コンテキストから変数を強制的に取得します)、追加の引数 $y を取り、それを呼び出し元に返します。

したがって、例を希望どおりに機能させるには、次のようにします。

<?php

function outer($var) {

  print $var;

  $inner = function() use ($var) {
    print $var;
  };
  $inner();
}

outer('hello');
于 2010-07-10T01:46:11.563 に答える
0

$inner 関数には $var にアクセスするスコープがないと思います

これを試して

function outer($var) {

  print $var;

  $inner = function($var) {
    print $var;
  };
  $inner($var);
}

outer('hello');
于 2010-07-10T01:43:39.477 に答える