考虑一个简单的函数:
function pass(&$arr)
{
// do something
}
如果我这样称呼它…
$a = [1,2,3];
pass($a);
…这将工作。但是,如果我这样做,……
pass([1,2,3]);
…将失败并报错不能通过引用传递参数1.
为什么我不能得到一个引用的临时数组在一个函数范围内,其中数组是有效的?
你不能那样做…只有变量应该通过引用传递.
虽然你可以创建一个函数,在它的作用域中创建一个变量,然后返回引用(但再一次,当你直接传递数组时,通过引用传递它的点是什么?我没有发现它的任何用途,还是我错过了什么?)
function pass(&$arr)
{
// do something
}
function &scopeVar($arr){
return $arr;
}
pass(scopeVar([1, 2, 3]));
@rhaven;
我不知道你在这里试图做什么,但错误信息不仅是正确的,它是有意义的。数组是动态创建的,虽然它实际上存在于内存中,但除了传递给函数的临时数组外,没有对它的引用。
试图引用这样一个短暂的值是一种矛盾修饰法。这完全没有意义。
@anees提供了一个有趣的解决方案,但底线是我认为您需要重新考虑代码,以及为什么需要:
- 调用中的临时变量,或者
- 函数中的引用。
函数调用中的[1,2,3]不是一个变量,它只是一个硬编码值。你可以把它传递给一个按值传递的函数,而不是按引用传递。如果函数是通过引用传递的,则需要一个变量。更重要的是,在PHP 7中,如果你试图在方法调用中声明变量,他们会在严格的标准中添加一个通知,即pass(($a = [1,2,3]));
: https://www.php.net/manual/en/migration70.incompatible.php
本页没有给出决定的原因。