Bagaimanakah PHP 'foreach' sebenarnya berfungsi?
Foreach dalam PHP menyokong lelaran ke atas tiga jenis nilai: tatasusunan, objek biasa dan objek boleh dilalui.
Susun atur dan Objek Lelaran:
Untuk tatasusunan dan objek, mekanisme lelaran adalah lebih kompleks. Tatasusunan PHP sebenarnya adalah kamus tersusun yang dilalui mengikut susunan sisipan. Lelaran ke atas objek biasa adalah serupa dengan lelaran ke atas tatasusunan kerana sifat objek juga disimpan sebagai kamus.
Semasa lelaran, penuding tatasusunan dalaman tidak digunakan secara langsung. Sebaliknya, HashPointer digunakan untuk menjejaki elemen semasa. Selepas badan gelung berjalan, HashPointer akan dipulihkan, tetapi hanya jika elemen itu masih wujud. Jika tidak, penunjuk tatasusunan semasa akan digunakan.
Jika tatasusunan bukan rujukan dan mempunyai kiraan rujukan lebih daripada 1, ia diduplikasi sebelum lelaran. Penduaan ini dilakukan untuk mengelakkan perubahan IAP daripada bocor kepada tatasusunan asal.
Pengubahsuaian Semasa Lelaran:
PHP membenarkan pengubahsuaian semasa lelaran, yang boleh membawa kepada beberapa tingkah laku yang mengelirukan . Jika elemen dialih keluar semasa lelaran, HashPointer akan dimajukan ke elemen seterusnya hanya jika mekanisme sandaran/pemulihan HashPointer berjaya. Jika gagal, penunjuk tatasusunan semasa (yang berada di hujung tatasusunan) akan digunakan sebaliknya.
Gelung bersarang juga boleh menjejaskan gelagat foreach. Jika elemen semasa gelung luar dialih keluar, gelung luar akan berhenti selepas lelaran pertama kerana HashPointer akan gagal dipulihkan.
Perubahan PHP 7:
PHP 7 memperkenalkan beberapa perubahan untuk setiap lelaran:
Atas ialah kandungan terperinci Bagaimanakah Gelung `foreach` PHP Sebenarnya Berfungsi Di Bawah Hud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!