Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Gelung `foreach` PHP Saya Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menggunakan Rujukan Laluan?

Mengapa Gelung `foreach` PHP Saya Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menggunakan Rujukan Laluan?

Linda Hamilton
Lepaskan: 2024-12-25 00:01:11
asal
179 orang telah melayarinya

Why Does My PHP `foreach` Loop Produce Unexpected Results When Using Pass-by-Reference?

Melalui Rujukan dalam foreach: Memahami Gelagat Tidak Dijangka

Gelung foreach PHP berulang ke atas setiap elemen dalam tatasusunan, tetapi dalam beberapa kes , outputnya boleh mengejutkan. Pertimbangkan kod berikut:

$a = ['zero', 'one', 'two', 'three'];

foreach ($a as &$v) {

}

foreach ($a as $v) {
  echo $v . PHP_EOL;
}
Salin selepas log masuk

Dijangkakan, output hendaklah 'sifar', 'satu', 'dua' dan 'tiga'. Walau bagaimanapun, jika anda menjalankan kod ini, anda akan mendapat 'sifar', 'satu', 'dua', 'dua' sebaliknya.

Tingkah laku yang tidak dijangka ini berpunca daripada konsep pembolehubah PHP melalui rujukan. Dalam gelung foreach pertama, kami menggunakan operator rujukan "&" untuk mencipta pembolehubah rujukan ($v) kepada setiap elemen dalam tatasusunan $a. Ini bermakna sebarang perubahan yang dibuat kepada $v juga akan mempengaruhi elemen yang sepadan dalam $a.

Pada mulanya, semua elemen dalam $a adalah pembolehubah biasa. Walau bagaimanapun, selepas gelung pertama, hanya $a[3] kekal sebagai pembolehubah rujukan. Ini kerana semasa melelaran melalui tatasusunan, pembolehubah rujukan sebelumnya ($v) ditimpa dengan setiap elemen baharu.

Dalam gelung kedua, apabila kita menggemakan $v, ia menunjuk kepada $a[3], yang ditetapkan kepada 'dua' dalam lelaran sebelumnya. Oleh itu, 'dua' digemakan dan bukannya 'tiga' dalam lelaran terakhir.

Dengan memahami perbezaan antara pembolehubah normal dan pembolehubah rujukan, dan cara ia berinteraksi dalam gelung foreach, kita boleh mengelakkan tingkah laku yang tidak dijangka dan pastikan kod kami beroperasi seperti yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Gelung `foreach` PHP Saya Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menggunakan Rujukan Laluan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan