foreach dengan Rujukan (Foreach dengan &)
Dalam PHP, menggunakan rujukan dalam gelung foreach membawa implikasi yang perlu diketahui oleh pengguna. Konsep ini boleh dilihat dalam coretan kod berikut:
<br>$a = array('a', 'b', 'c', 'd');</p> <p>foreach ($a sebagai &$v) { }<br>foreach ($a sebagai $v) { }</p> <p>print_r($a);<br>
Kod ini kelihatan mudah, tetapi kelakuannya mungkin kelihatan membingungkan bagi sesetengah orang. Selepas melaksanakan gelung pertama, nilai dalam tatasusunan $a kekal tidak berubah. Walau bagaimanapun, dalam gelung seterusnya, elemen terakhir $a secara tidak dijangka ditimpa dengan nilai 'a', 'b' dan 'c'. Ini disebabkan oleh tingkah laku penting dalam gelung foreach PHP apabila menggunakan rujukan (ditandakan dengan simbol ampersand (&)).
Rujukan dan Pengubahsuaian Elemen Terakhir
Oleh menggunakan rujukan & dalam gelung pertama, $v menjadi alias untuk elemen semasa yang dilalui dalam tatasusunan. Apabila perubahan dibuat kepada $v, ia mengubah suai elemen asal dalam $a dengan berkesan. Dalam kes ini, gelung ketiga berulang pada tatasusunan, dan walaupun $v bukan lagi rujukan, ia masih menunjuk kepada elemen terakhir tatasusunan yang bermutasi ($a[3]) dan menimpanya dengan nilai daripada lelaran sebelumnya .
Amaran PHP
Tingkah laku pelik ini didokumenkan dalam PHP manual:
Amaran: Rujukan $value dan elemen tatasusunan terakhir kekal walaupun selepas gelung foreach. Adalah disyorkan untuk memusnahkannya dengan unset().
Untuk mengelakkan tingkah laku yang tidak dijangka, pertimbangkan untuk memusnahkan rujukan dengan unset() seperti yang ditunjukkan di bawah:
<br>$a = tatasusunan('a', 'b', 'c', 'd');</p> <p>foreach ($a sebagai &$v) { }<br>unset($v);<br>foreach ($a sebagai $v) { }</p> <p>print_r($a);<br>
Oleh menyahset rujukan secara eksplisit, anda memastikan gelung berikutnya beroperasi pada nilai asal dalam tatasusunan. Pendekatan ini menghalang pengubahsuaian yang tidak diingini pada kandungan tatasusunan.
Atas ialah kandungan terperinci Mengapakah Menggunakan Rujukan dalam Gelung `foreach` PHP Tanpa Dijangka Mengubah Suai Elemen Tatasusunan Terakhir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!