一般陣列,foreach會把值拷貝到迴圈變數中
物件陣列,foreach會把值(物件)的引用拷貝迴圈變數中,因為是拷貝,所以將會改變原物件的值。
class a
{
public $a = 10;
public $b = 11;
public $c = 12;
}
$instanceA = new a();
$instanceB = new a();
$arr = [$instanceA, $instanceB];
foreach ($arr as $key => $object) {
$object->a = 100;
}
var_dump($arr);
執行結果:
array(2) {
[0]=>
object(a)#1 (3) {
["a"]=>
int(100)
["b"]=>
int(11)
["c"]=>
int(12)
}
[1]=>
object(a)#2 (3) {
["a"]=>
int(100)
["b"]=>
int(11)
["c"]=>
int(12)
}
}
可以看到屬性a的值被修改了。
下面是一般陣列的情況:
$arrA = [
10, 11, 13
];
$arrB = [
10, 11, 13
];
$arr = [$arrA, $arrB];
foreach ($arr as $key => $object) {
$object[0] = 100;
}
var_dump($arr);
執行結果:
array(2) {
[0]=>
array(3) {
[0]=>
int(10)
[1]=>
int(11)
[2]=>
int(13)
}
[1]=>
array(3) {
[0]=>
int(10)
[1]=>
int(11)
[2]=>
int(13)
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結