cari
Rumahpembangunan bahagian belakangtutorial phpBagaimana Gelung `foreach` PHP Sebenarnya Berfungsi, dan Bagaimana Pelaksanaannya Berubah Antara PHP 5 dan PHP 7?

How Does PHP's `foreach` Loop Actually Work, and How Has Its Implementation Changed Between PHP 5 and PHP 7?

Bagaimana foreach sebenarnya berfungsi dalam PHP?

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:

  • Arrays
  • Biasa objek
  • Objek boleh lalui

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:

  • Dalam kes ujian 1 dan 2, tatasusunan tidak diduplikasi kerana ia mempunyai kiraan semula=1 dan diluluskan mengikut nilai.
  • Dalam kes ujian 3, IAP ditetapkan pada penghujung tatasusunan selepas gelung disebabkan oleh penyingkiran unsur.
  • Dalam kes ujian 4 dan 5, tatasusunan diduplikasi kerana fungsi by-ref (setiap, set semula) menerima rujukan kepada tatasusunan pendua.

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:

  • Dalam PHP 7, kes ujian 1 dan 2 mempunyai output yang sama seperti dalam PHP 5 kerana tatasusunan tidak diduplikasi.
  • Dalam PHP 7, kes ujian 3 menghasilkan output yang berbeza kerana gelung no lebih lama mempengaruhi IAP.
  • Dalam PHP 7, kes ujian 4 dan 5 berkelakuan serupa kerana setiap satu dan set semula masih menduplikasi tatasusunan, manakala foreach menggunakan tatasusunan asal.

Peningkatan PHP 7 Tambahan:

  • Gelung luar dalam lelaran bersarang tidak lagi dibatalkan apabila elemen dialih keluar dalam gelung dalaman.
  • Masalah "anak panah dalam masa" ialah diselesaikan.

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!

Kenyataan
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
Mengoptimumkan Kod PHP: Mengurangkan Penggunaan Memori & Masa PelaksanaanMengoptimumkan Kod PHP: Mengurangkan Penggunaan Memori & Masa PelaksanaanMay 10, 2025 am 12:04 AM

TooptimizephpcodeforreducedmemoryusageandexecutionTime, ikuti: 1) userereferencesInsteadofcopylylargedataStructureStructureStructureStoreducemoryconsumption.2)

E-mel PHP: Panduan Penghantaran Langkah demi LangkahE-mel PHP: Panduan Penghantaran Langkah demi LangkahMay 09, 2025 am 12:14 AM

PhpisusedforsendingemailsduetoitsintegrationWithservermailservicesandexternalsmtpproviders, automatingnotificationsandmarketingcampaigns.1) Setupyourphpenvironmentwithawebserverandphp, Memastikan

Cara Menghantar E -mel melalui PHP: Contoh & KodCara Menghantar E -mel melalui PHP: Contoh & KodMay 09, 2025 am 12:13 AM

Cara terbaik untuk menghantar e -mel ialah menggunakan perpustakaan phpmailer. 1) Menggunakan fungsi mel () adalah mudah tetapi tidak boleh dipercayai, yang boleh menyebabkan e -mel memasuki spam atau tidak dapat dihantar. 2) PHPMailer menyediakan kawalan dan kebolehpercayaan yang lebih baik, dan menyokong surat HTML, lampiran dan pengesahan SMTP. 3) Pastikan tetapan SMTP dikonfigurasi dengan betul dan penyulitan (seperti startTLS atau SSL/TLS) digunakan untuk meningkatkan keselamatan. 4) Untuk sejumlah besar e -mel, pertimbangkan untuk menggunakan sistem giliran mel untuk mengoptimumkan prestasi.

E -mel PHP Lanjutan: Headers & Ciri -ciri KustomE -mel PHP Lanjutan: Headers & Ciri -ciri KustomMay 09, 2025 am 12:13 AM

CustomheadersandadvancedfeaturesInphpeMailenhanceFunctialityandreliability.1) customHeadersAddmetadataFortrackingandCategorization.2) htmlemailsallowformattingIntivity.3)

Panduan untuk menghantar e -mel dengan PHP & SMTPPanduan untuk menghantar e -mel dengan PHP & SMTPMay 09, 2025 am 12:06 AM

Menghantar mel menggunakan PHP dan SMTP boleh dicapai melalui Perpustakaan PHPMailer. 1) Pasang dan konfigurasikan PHPMailer, 2) Tetapkan butiran pelayan SMTP, 3) Tentukan kandungan e -mel, 4) Hantar e -mel dan mengendalikan kesilapan. Gunakan kaedah ini untuk memastikan kebolehpercayaan dan keselamatan e -mel.

Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?May 08, 2025 am 12:21 AM

Thebestapproachforsendingemailsinphpisusingthephpmaillibraryduetoitsreliability, featureRichness, andeaseofuse.phpmailersupportssmtp, proveddetaileDerrorHandling, membolehkanSendsendingHtmlandPlainteMails, supportsattachments, danStoVeShanCess

Amalan terbaik untuk suntikan ketergantungan dalam phpAmalan terbaik untuk suntikan ketergantungan dalam phpMay 08, 2025 am 12:21 AM

Alasan untuk menggunakan suntikan ketergantungan (DI) ialah ia menggalakkan gandingan longgar, kebolehlihatan, dan pemeliharaan kod. 1) Gunakan pembina untuk menyuntik kebergantungan, 2) Elakkan menggunakan pencari perkhidmatan, 3) Gunakan bekas suntikan ketergantungan untuk menguruskan kebergantungan, 4) meningkatkan kesesuaian melalui suntikan suntikan, 5) Elakkan kebergantungan over-suntikan, 6) Pertimbangkan kesan DI terhadap prestasi.

Petua Penalaan Prestasi PHPPetua Penalaan Prestasi PHPMay 08, 2025 am 12:20 AM

Phpperformancetuningiscrucialbecauseitenhancesspeedandeficiency, whoarevitalforwebapplications.1) cachingwithapcureSdatabaseloadandimprovesresponsetimes.2)

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.