Pengenalan:
foreach digunakan secara meluas dalam PHP untuk gelung melalui tatasusunan, objek dan struktur data lain. Memahami kerja dalamannya adalah penting untuk mengelakkan tingkah laku yang tidak dijangka.
Tiga Jenis foreach Iterables:
foreach menyokong tiga jenis iterables:
Lelaran Objek Boleh Travers:
Untuk objek Boleh Travers, foreach bertindak sebagai gula sintaksis untuk:
foreach ($it as $k => $v) {} translates to: if ($it instanceof IteratorAggregate) { $it = $it->getIterator(); } for ($it->rewind(); $it->valid(); $it->next()) { $v = $it->current(); $k = $it->key(); // ... }
Susun atur dan Objek Lelaran:
Kamus Tertib:
Tatasusunan dan objek PHP pada asasnya ialah kamus tersusun yang mengekalkan susunan sisipan. Lelaran mengikut tertib ini.
Penukaran Objek:
Perwakilan objek yang dibungkus ditukar kepada kamus semasa lelaran. Oleh itu, lelaran objek biasa menjadi serupa dengan lelaran tatasusunan.
Penunjuk Tatasusunan Dalaman (IAP):
Tasusunan dalam PHP 5 mempunyai penunjuk tatasusunan dalaman (IAP) yang menyokong pengubahsuaian dan melangkau terlebih dikeluarkan elemen.
HashPointer:
foreach dalam PHP 5 menggunakan HashPointer untuk menyandarkan kedudukan IAP dan cincang sebelum menjalankan badan gelung. Ia memulihkannya selepas itu jika unsur itu masih wujud; jika tidak, ia menggunakan kedudukan IAP semasa.
Penduaan Tatasusunan:
foreach dalam PHP 5 menduplikasi tatasusunan yang bukan rujukan (is_ref=0) dan mempunyai kiraan semula lebih daripada 1.
PHP 5 Contoh:
Perubahan PHP 7:
Pelajar Hashtable:
PHP 7 menggunakan iterator jadual hash luaran, didaftarkan dalam tatasusunan. Setiap iterator dimajukan jika elemen yang sepadan dialih keluar.
Tiada Penggunaan IAP oleh foreach:
foreach tidak lagi menggunakan IAP, menghapuskan keperluan untuk pendua. Lelaran tatasusunan nilai ikut sentiasa menggunakan elemen asal.
Penduaan Tatasusunan:
Tasusunan tidak lagi diduplikasi semasa lelaran nilai mengikut, tanpa mengira pengiraan semula atau status rujukannya.
Contoh PHP 7:
Peningkatan PHP 7 Tambahan:
Atas ialah kandungan terperinci Bagaimana Gelung `foreach` PHP Sebenarnya Berfungsi, dan Bagaimana Pelaksanaannya Berubah Antara PHP 5 dan PHP 7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!