提问人:rhavin 提问时间:10/29/2021 更新时间:10/29/2021 访问量:85
有没有办法在 php 中通过引用传递临时数组?[已结束]
Is there a way to pass temporary arrays by reference in php? [closed]
问:
考虑一个简单的函数:
function pass(&$arr)
{
// do something
}
如果我这样称呼它......
$a = [1,2,3];
pass($a);
...这将起作用。但是,如果我这样做,...
pass([1,2,3]);
...它将失败,并出现错误 Cannot pass parameter 1 by reference。
为什么在数组有效的函数作用域中无法获得对临时数组的引用?
答:
2赞
anees
10/29/2021
#1
好吧,你不能那样做...... 根据 php 手册:只有变量应该通过引用传递。
虽然你可以创建一个函数,在其作用域中创建一个变量,然后返回引用(但是当你直接传递数组时,通过引用传递它有什么意义?我没有发现它有任何用处,或者我错过了什么?
function pass(&$arr)
{
// do something
}
function &scopeVar($arr){
return $arr;
}
pass(scopeVar([1, 2, 3]));
评论
0赞
rhavin
10/29/2021
你错过了可用性的易用性:[1,2,3] 是一个变量,它只是没有名称。在某些情况下,你事后需要它,在某些情况下,你只想开火并忘记。我一直在寻找一种简单的解决方案,我可以两者兼而有之。
0赞
pumpkinthehead
10/29/2021
手册中的参考文献可以让你深入了解为什么他们不允许你这样做:php.net/manual/en/language.references.whatare.php“PHP中的引用是一种通过不同名称访问相同变量内容的方法。如果未在调用范围内创建命名内存位置,则该函数无法访问相同的变量内容。这家伙解释得非常好:stackoverflow.com/questions/9848295/......
3赞
Jaquarh
10/29/2021
更重要的是,如何在内存中存储值,然后从内存中引用它?Dur,谁会想到 - 这就是为什么我们有变量,同样也是您可以通过引用传递的原因。这家伙很困惑,这个问题应该结束了。
0赞
anees
10/30/2021
@rhavin不会有更简单的解决方案......您可以在全局范围内创建该函数,并随时使用...(也适用于其他情况。
1赞
David Lee Crites
10/29/2021
#2
@rhaven;
我不知道你在这里试图做什么,但错误消息不仅正确,而且有意义。数组是动态创建的,虽然它实际上存在于内存中,但除了传递给函数的临时数组外,没有对它的引用。
试图引用这样的短暂值是矛盾的。这根本没有意义。
@anees提供了一个有趣的解决方法,但最重要的是,我认为您需要重新考虑代码,以及为什么您需要:
- 调用中的 temp 变量,或者
- 函数中的引用。
0赞
pumpkinthehead
10/29/2021
#3
函数调用中的 [1,2,3] 不是变量,它只是一个硬编码值。您可以将其传递给按值传递的函数,但不能通过引用传递。如果函数是通过引用传递的,则它需要一个变量。更重要的是,在 PHP 7 中,如果您尝试在方法调用中声明变量,他们会在严格的标准中添加一个通知,即: https://www.php.net/manual/en/migration70.incompatible.phppass(($a = [1,2,3]));
此页面没有给出该决定的原因。
评论
&
zval
[1,2,3]