Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah menggunakan rujukan pas dalam gelung `foreach` PHP mengubah suai tatasusunan selepas gelung berakhir?
PHP Foreach Pass melalui Rujukan dan Pengubahsuaian Tatasusunan
Dalam PHP, menggunakan rujukan lulus dalam gelung foreach boleh membawa kepada tingkah laku yang tidak dijangka. Pertimbangkan kod berikut:
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) {} // Array remains unchanged: ["foo", "bar", "baz"] foreach ($arr as $item) {} // Array is modified: ["foo", "bar", "bar"]
Mengapakah gelung kedua mengubah suai tatasusunan?
Dalam gelung pertama, pembolehubah $item diluluskan melalui rujukan. Ini bermakna bahawa perubahan yang dibuat kepada $item juga mempengaruhi elemen yang sepadan dalam tatasusunan $arr. Walau bagaimanapun, dalam gelung kedua, $item diluluskan oleh nilai. Oleh itu, perubahan yang dibuat kepada $item tidak menjejaskan tatasusunan.
Yang penting, selepas gelung pertama, $item masih merujuk elemen terakhir $arr. Apabila gelung kedua berulang pada tatasusunan, setiap nilai $item menimpa elemen terakhir $arr kerana kedua-duanya merujuk kepada lokasi memori yang sama.
Menyahpepijat Output
Untuk memahami gelagat, kita boleh menggemakan nilai semasa $item dan mencetak rekursif tatasusunan $arr semasa setiap lelaran gelung.
Gelung Pertama:
foo Array ( [0] => foo [1] => bar [2] => baz ) bar Array ( [0] => foo [1] => bar [2] => baz ) baz Array ( [0] => foo [1] => bar [2] => baz )
Selepas gelung pertama, $item menunjuk ke elemen terakhir $arr.
Gelung Kedua:
foo Array ( [0] => foo [1] => bar [2] => foo ) bar Array ( [0] => foo [1] => bar [2] => bar ) bar Array ( [0] => foo [1] => bar [2] => bar )
Memandangkan setiap nilai $item ditimpa , ia juga mengubah suai elemen terakhir $arr.
Adakah ia Pepijat?
Tidak, tingkah laku ini bukan pepijat melainkan tingkah laku yang dimaksudkan oleh pas- rujukan oleh. Adalah penting untuk memahami implikasi menghantar pembolehubah melalui rujukan dan menggunakannya dengan sewajarnya.
Atas ialah kandungan terperinci Mengapakah menggunakan rujukan pas dalam gelung `foreach` PHP mengubah suai tatasusunan selepas gelung berakhir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!