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

use*_*729 4 php arrays loops object

$arr = array(array(array()));
foreach($arr as $subarr)
{
 $subarr[] = 1;
}
var_dump($arr);
Run Code Online (Sandbox Code Playgroud)

输出:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    array(0) {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但对于对象,它的参考:

class testclass {
}

$arr = array(new testclass());
foreach($arr as $subarr)
{
 $subarr->new = 1;
}
var_dump($arr);
Run Code Online (Sandbox Code Playgroud)

输出:

array(1) {
  [0]=>
  object(testclass)#1 (1) {
    ["new"]=>
    int(1)
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么治疗array不同object

Tyl*_*ter 14

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

PHP按值传递所有数组.

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

PHP没有通过引用传递数组的逻辑上没有理由,但这就是语言的工作原理.如果需要,可以按值迭代数组,但必须通过引用显式声明值:

foreach ( $myArray as &$val ){
    $val = 1; //updates the element in $myArray
}
Run Code Online (Sandbox Code Playgroud)

感谢Yacoby的例子.

坦率地说,我更喜欢通过值传递数组,因为数组是一种基本数据结构,而对象是更复杂的数据结构.目前的系统是有道理的,至少对我而言.