は、たとえば、:PHPクロージャのuseキーワードは参照渡しですか?私はこれを行う場合
function bar(&$var)
{
$foo = function() use ($var)
{
$var++;
};
$foo();
}
$my_var = 0;
bar($my_var);
を$my_var
変更されますか?そうでない場合は、$foo
にパラメータを追加せずにこれを動作させるにはどうすればよいですか?
は、たとえば、:PHPクロージャのuseキーワードは参照渡しですか?私はこれを行う場合
function bar(&$var)
{
$foo = function() use ($var)
{
$var++;
};
$foo();
}
$my_var = 0;
bar($my_var);
を$my_var
変更されますか?そうでない場合は、$foo
にパラメータを追加せずにこれを動作させるにはどうすればよいですか?
いいえ、それらは参照によって渡されていない - use
は、関数のパラメータのような同様の表記に従います。あなたはdebug_zval_dump
機能(Demo)の助けを借りて自分でそれを検証することができます
<?php
header('Content-Type: text/plain;');
function bar(&$var)
{
$foo = function() use ($var)
{
debug_zval_dump($var);
$var++;
};
$foo();
};
$my_var = 0;
bar($my_var);
echo $my_var;
出力:
long(0) refcount(3)
0
をフル・スルー・オール・スコープ・ワーキング参照の参照カウントを持っているでしょう
$foo = function() use (&$var)
それは再帰をこのように作成することもできます::
あなたは参照渡しとして使用することを定義することによって達成することを書かれたとおり1。$func = NULL;
$func = function() use (&$func) {
$func();
}
クローズはほとんどの場合、参照によってではなく値によって閉じられます。あなたは、引数リストの&
を追加することで、「参照によって使用」があります。
function() use (&$var)
これはanonymous functions manual page例3で見ることができます。
いいえ、参照渡しされません。
function foo(&$var)
{
$foo = function() use ($var)
{
$var++;
};
$foo();
}
$my_var = 0;
foo($my_var);
echo $my_var; // displays 0
function bar(&$var)
{
$foo = function() use (&$var)
{
$var++;
};
$foo();
}
$my_var = 0;
bar($my_var);
echo $my_var; // displays 1
いいえ、それは変更されませんが...これは..私は私がこのように最良の答えをマークするのを忘れに気づいマニュアル –