Rumah > Artikel > pembangunan bahagian belakang > Mengapakah elemen terakhir dalam tatasusunan PHP menjadi pendua apabila menggunakan gelung foreach dengan rujukan lulus?
PHP Foreach Pass melalui Rujukan: Misteri Penduaan Elemen Terakhir Terbongkar
Pertimbangkan kod PHP berikut:
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) { /* do nothing by reference */ } print_r($arr); foreach ($arr as $item) { /* do nothing by value */ } print_r($arr);
Selepas pelaksanaan, ia secara tidak dijangka mengubah suai tatasusunan asal $arr, mengakibatkan output berikut:
Array ( [0] => foo [1] => bar [2] => baz ) Array ( [0] => foo [1] => bar [2] => bar )
Memahami Tingkah Laku
Selepas gelung foreach awal, pembolehubah $item kekal sebagai rujukan kepada lokasi memori yang sama seperti $arr[2 ]. Akibatnya, setiap lelaran gelung foreach kedua, yang menghantar argumen mengikut nilai, menggantikan nilai yang dirujuk (dan oleh itu $arr[2]) dengan nilai lelaran baharu.
Penjelasan Terperinci
Dalam gelung pertama:
Pada penghujung gelung pertama, $item masih menunjuk ke $arr[2].
Dalam gelung kedua:
Menjelaskan Salah Tanggapan
Tingkah laku ini adalah tidak dianggap pepijat. Ia sejajar dengan gelagat rujukan yang dimaksudkan dalam PHP. Keputusan yang sama akan diperhatikan jika anda menggunakan sintaks berikut di luar gelung:
for ($i = 0; $i < count($arr); $i++) { $item = $arr[$i]; }
Kesimpulan
Apabila bekerja dengan rujukan dalam PHP, adalah penting untuk mengenali bahawa pengubahsuaian yang dibuat melalui pembolehubah yang dirujuk juga akan mempengaruhi nilai asal. Tingkah laku ini boleh dimanfaatkan dengan berkesan atau dielakkan bergantung pada hasil yang diingini.
Atas ialah kandungan terperinci Mengapakah elemen terakhir dalam tatasusunan PHP menjadi pendua apabila menggunakan gelung foreach dengan rujukan lulus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!