【发布时间】:2017-07-11 21:33:31
【问题描述】:
我在 PHP 中使用 array_shift 函数遇到了一些奇怪的行为:
function shift($arr)
{
array_shift($arr);
}
$a = [1, 2, 3];
shift($a);
print_r($a);
输出:
Array ( [0] => 1 [1] => 2 [2] => 3 )
我的预期输出:
Array ( [0] => 2 [1] => 3 )
说明:
我相信$a 和$arr 尽管是不同的引用,但指向同一个数组对象。我希望array_shift 查看$arr 指向的位置并修改(缩短)该数组。然后通过$a 查找数组时可以看到该更改。
但是,当我测试我的理论时,看不到任何变化。该数组与调用 array_shift 之前一样长。什么给了?
【问题讨论】:
-
为什么不使用 unset 和 array_slice?
-
不要惊慌的回答解释了你的问题。我确实想指出,自 PHP 5 以来,所有对象都是通过引用传递的,所以这确实会导致混淆,因为在定义参数时,很多时候你不需要使用 '&',并且PHP OOP 的普及,人们经常使用对象,但是对于所有其他变量类型,您需要 '&' 来指定“传递引用”给这个变量。
标签: php parameter-passing