gpt4 book ai didi

php - PHP 不通过引用迭代数组的任何原因?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:55:32 24 4
gpt4 key购买 nike

$arr = array(array(array()));
foreach($arr as $subarr)
{
$subarr[] = 1;
}
var_dump($arr);

输出:

array(1) {
[0]=>
array(1) {
[0]=>
array(0) {
}
}
}

但是对于object,它是reference:

class testclass {
}

$arr = array(new testclass());
foreach($arr as $subarr)
{
$subarr->new = 1;
}
var_dump($arr);

输出:

array(1) {
[0]=>
object(testclass)#1 (1) {
["new"]=>
int(1)
}
}

为什么对待 arrayobject 不同?

最佳答案

PHP 通过引用传递所有对象。 (PHP5?)

PHP 按值传递所有数组。

最初 PHP 通过值传递对象和数组,但为了减少创建对象的数量,他们将对象切换为通过引用自动传递。

PHP 不通过引用传递数组并没有真正合乎逻辑的原因,但这正是该语言的工作原理。如果需要,可以按值遍历数组,但必须通过引用显式声明值:

foreach ( $myArray as &$val ){
$val = 1; //updates the element in $myArray
}

感谢 Yacoby例如。

坦率地说,我更喜欢按值传递数组,因为数组是一种基本数据结构,而对象是更复杂的数据结构。目前的系统是有意义的,至少对我来说是这样。

关于php - PHP 不通过引用迭代数组的任何原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com