PHPの変な仕様を発見しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php // 配列$arr1を宣言して初期化 $arr1 = array(0, 1, 2); // 配列$arr1のindex:1の"アドレス"を$dummyに代入 $dummy = &$arr1[1]; // 配列$arr1をarr2に代入 $arr2 = $arr1; // $arr2の全要素に10加算 for($i=0; $i<count($arr2); $i++){ $arr2[$i] += 10; } // $arr1の中身を出力 print_r($arr1); ?> |
上記コードの出力結果print_r($arr1);は下記になります。
1 2 3 4 5 6 |
Array ( [0] => 0 [1] => 11 [2] => 2 ) |
なぜか$arr1のindex:1だけ10加算されています!
これは、
$dummy = &$arr1[1];
で$dummyという変数に参照を代入した結果、
$arr1[1]と$dummyは同一の領域を指すことになる。
そのため$arr1を代入した$arr2の全要素に10加算した時に、
$dummyの値に10加算されるため、$arr1[1]の値だけ$dummy1と同じ1+10=11になるのだそうです。
これは危険な仕様ですね。
僕はC,Javaの後にPHPの学習を始めたため、
なかなか慣れないです。