作品:
$t = function($x,$y) use (&$t){
...
}
動作しません:
$t = function($x,$y) use ($t){
...
}
関数自体を参照として渡す必要があるのはなぜですか?
作品:
$t = function($x,$y) use (&$t){
...
}
動作しません:
$t = function($x,$y) use ($t){
...
}
関数自体を参照として渡す必要があるのはなぜですか?
たぶんこれが役立ちます:
$f = 42;
$f = function() use ($f)
{
var_dump($f);
};
$f();
それは42を出力します。
use()
関数が定義され、 に割り当てられる前に、 がヒットします$f
。したがって、参照渡ししない場合は、関数が作成される前と同じように変数にアクセスしています。この場合は 42 です。あなたの場合は NULL です。
参照を渡す$f
と、関数が呼び出されたときに の値が取得されます。これは、期待どおりの無名関数になります ($f を再割り当てしていないと仮定します)。
参照変数を渡すということは、そのスコープ内の同じ変数にアクセスしていることを意味します。
参照変数は、以前に作成されたものと同じ変数を指します。
例
<?php
$a = 10;
$b = &$a;
function change_b($pass)
{
$b = $pass++;
}
echo $b."<br />";
change_b(&$a);
echo $b;
?>
上記のコードは10を出力し、次に11を出力します。
再帰関数は同じリソースに何度もアクセスする必要があり、値をコピーするよりもはるかに効率的です。