是否有一种方法通过引用在php传递临时数组?



考虑一个简单的函数:

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. 函数中的引用。

函数调用中的[1,2,3]不是一个变量,它只是一个硬编码值。你可以把它传递给一个按值传递的函数,而不是按引用传递。如果函数是通过引用传递的,则需要一个变量。更重要的是,在PHP 7中,如果你试图在方法调用中声明变量,他们会在严格的标准中添加一个通知,即pass(($a = [1,2,3]));: https://www.php.net/manual/en/migration70.incompatible.php

本页没有给出决定的原因。

最新更新