Dan*_*ien 2 php pass-by-reference
如果函数my_func定义为:
function my_func(&$arr) {
array_push($arr, 0);
array_push($arr, 1);
array_push($arr, 2);
array_push($arr, 3);
array_push($arr, 4);
}
Run Code Online (Sandbox Code Playgroud)
如果我my_func按如下方式调用,则结果如预期:
$test_array = array();
my_func($test_array);
print_r($test_array);
Run Code Online (Sandbox Code Playgroud)
结果是:
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
)
我想我可以通过调用my_func如下来缩短这段代码:
my_func($test_array = array());
print_r($test_array);
Run Code Online (Sandbox Code Playgroud)
但是,结果会发生变化:
Array ( )
为什么这个较短的代码段会导致不同的结果?
您不是通过引用传递变量,而是传递表达式的值.
如果要启用所有错误,您将看到以下消息:
Strict Standards: Only variables should be passed by reference in
Run Code Online (Sandbox Code Playgroud)
赋值的值是自己赋值的值.它是传递给数组的值 - 数组的副本my_func.
不应该通过引用传递其他表达式,因为结果是未定义的.
结论:只有不断传递变量($x,$x[0],$x->a),新对象或引用从函数返回到期待的引用的功能.