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