为什么使用数组引用调用PHP函数的这种较短方法会导致不同的结果?

为什么使用数组引用调用PHP函数的这种较短方法会导致不同的结果?,php,pass-by-reference,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); } 如果按如下方式调用my_func,则结果与预期一致: $test_array = array(); my_func($test_array); prin

如果函数
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);
结果:

Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 ) 然而,结果发生了变化:

Array ( ) 排列 ( ) 为什么这个较短的代码段会导致不同的结果?

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

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

严格标准:在中只能通过引用传递变量
赋值是指赋值本身的值。就是这个值—传递给
my_func
的数组副本

该报告更强调了这一点:

不应通过引用传递其他表达式,因为结果未定义


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

请参见:(最后一个代码块,
foo($a=5);//表达式,而不是变量
)。我必须承认,php中总是有这样的异常,看起来它们“应该”工作。。。但是PHP内部的一些工作方式把它搞砸了:(最终你会记住它们。如果我没有失去2个代表点,我会完全因为它又是你而否决它:p尽管回答得很好:)@vbciller好吧,我想说你不应该空手而归,但如果没有问题,我会很乐意投赞成票;)也许下一次,从我们现在开始,我们甚至会,因为我相信你否决了我对另一个问题的回答:p如果你没有。。。好吧lol@VBAssassin不,我没有否决你的回答。如果我对每一个我有意见的答案都投了反对票,我就没有代表了;) Array ( )