0

それらの間に違いはありますか?

$something = function($var) { 

});

$something = function() use ($var) {

});
4

2 に答える 2

2

前者は、 という名前の単一パラメーターを持つ関数$varです。スクリプトの別の場所で別の$var定義があったとしても、それは問題ではありません。関数には、そのスコープ内 (定義内) への参照は含まれません。

例えば。

$bar = 3;
function foo($bar) {
   if (isset($bar)) {
      echo "bar: $bar";
   } else {
      echo "no bar";
   } 
}
foo(10); // prints "bar: 10", because the function is called with the argument "10"
foo(); // prints "no bar" -- $bar is not defined inside the function scope

後者の場合、use $varクロージャーは、含まれるスコープ内の $var の定義が、関数内でグローバル変数のようにアクセスできることを意味します。

例えば、

$bar = 3;
function foo($blee) use $bar {
   if (isset($bar)) {
      echo "bar: $bar";
   } else {
      echo "no bar";
   }
   if (isset($input)) {
      echo "input: $input";
   } else {
      echo "no input";
   }
}
foo(1); // prints "bar: 3, input: 1"
foo(); // prints "bar: 3, no input"
于 2013-09-21T17:30:03.850 に答える
1

1 つ目は 1 つのパラメーターを受け取る関数で、もう 1 つはパラメーターをとらず$var、親スコープの変数の値を閉じる関数です。

于 2013-09-21T17:23:51.800 に答える