2

如果一个函数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);
}

如果我my_func按如下方式调用,则结果如预期:

$test_array = array();
my_func($test_array);
print_r($test_array);

结果是:

大批
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)

my_func我在想我可以通过如下调用来缩短这段代码:

my_func($test_array = array());
print_r($test_array);

但是,结果发生了变化:

大批
(
)

为什么这个较短的代码片段会导致不同的结果?

4

1 回答 1

5

您不是通过引用传递变量,而是通过表达式的值。

如果您要启用所有错误,您将看到以下消息:

Strict Standards: Only variables should be passed by reference in 

赋值的值是本身被赋值的值。正是该值(数组的副本)被传递给my_func.

关于此事的PHP 文档更强烈地说明了这一点:

不应通过引用传递其他表达式,因为结果是 undefined

结论:只将变量($x, $x[0], $x->a)、新对象或从函数返回的引用传递给期望引用的函数。

于 2012-11-25T19:59:46.563 回答