为什么这段代码不能像我预期的那样工作? 在 Test(&$array) 函数中,我会将 ref 参数设置为全局 $array1 但这不起作用。
$array1 = array();
$array2 = array();
function Test(&$array)
{
global $array1;
$array = &$array1;
$array['inside'] = 'inside';
}
//由函数设置:
Test($array2);
$array2['test1'] = 'test1';
var_dump($array1); //array('inside' => 'inside') ** WHERE IS THE 'test1' key? **
var_dump($array2); //array('test1' => 'test1') ** WHERE IS THE 'inside' key? **
//没有函数的设置:
$array2 = &$array1;
$array2['test2'] = 'test2';
var_dump($array1); //array('inside' => 'inside', 'test2' => 'test2') ** FINE **
var_dump($array2); //array('inside' => 'inside', 'test2' => 'test2') ** FINE **
编辑:
很明显,如果我将 $array 更改为指向 $array1,那么 $array1 将具有 'inside' => 'inside' 值 outside 函数。有什么不清楚的是,如果我设置 $array2['test1'] = 'test1' 为什么不也更改此 $array1?它在函数内部之前“链接”!
最佳答案
当您在函数内部执行 $array = &$array1;
时,您正在更改局部变量 $array
的值。
它曾经有对 $array2
的引用,但现在它包含对 $array1
的引用。因此,当您修改 $array
时,您正在修改 $array1
。
关于PHP函数数组参数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14326093/