それらの間に違いはありますか?
$something = function($var) {
});
$something = function() use ($var) {
});
前者は、 という名前の単一パラメーターを持つ関数$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"
1 つ目は 1 つのパラメーターを受け取る関数で、もう 1 つはパラメーターをとらず$var
、親スコープの変数の値を閉じる関数です。