Memahami Gelung 'foreach' PHP
'foreach' menyokong lelaran ke atas tiga jenis nilai:
- Tatasusunan
- Biasa objek
- Objek boleh dilalui
Lelaran Tatasusunan dan Objek
Susun atur dan objek dilalui sebagai kamus tersusun. Melintasi objek biasa adalah serupa dengan merentasi tatasusunan kerana ia diwakili secara dalaman sebagai kamus tersusun.
Perubahan Dalaman semasa Lelaran
- Lelaran tatasusunan mengikut rujukan atau lelaran objek (semantik by-handle) membenarkan pengubahsuaian dalam gelung sambil lelaran.
- Lelaran ke atas tatasusunan dengan kiraan rujukan lebih besar daripada 1 mungkin menduplikasi tatasusunan sebelum pengubahsuaian.
Pendekatan PHP 5
- Menggunakan penunjuk tatasusunan dalaman (IAP) untuk menjejak kedudukan.
- Selain itu menggunakan HashPointer untuk menyokong berbilang gelung 'foreach' serentak.
- Penduaan tatasusunan berlaku jika kiraan rujukan lebih besar daripada 1 dan tatasusunan bukan rujukan.
- Kemajuan IAP berlaku sebelum badan gelung berjalan.
PHP 7 Pendekatan
- Meninggalkan penggunaan IAP sepenuhnya.
- Memperkenalkan iterator hashtable yang didaftarkan dalam tatasusunan untuk mengendalikan pengubahsuaian pertengahan lelaran.
- Penduaan tatasusunan dalam by- lelaran tatasusunan nilai berlaku hanya jika tatasusunan diubahsuai semasa gelung.
- tingkah laku 'foreach' tidak lagi dipengaruhi oleh 'current()' atau 'reset()'.
Jawapan kepada Soalan Anda
1. Adakah ini betul dan keseluruhan cerita?
Pemahaman anda tentang 'foreach' sebagai bekerja dengan salinan tatasusunan tetapi mempengaruhi penuding tatasusunan adalah betul. Walau bagaimanapun, dalam PHP 7, 'foreach' tidak lagi menggunakan IAP dan sebaliknya bergantung pada iterator hashtable, menghasilkan gelagat yang lebih konsisten dan boleh diramal.
2. Apakah yang sebenarnya dilakukannya?
- PHP 5: Menggunakan gabungan IAP dan HashPointer untuk menyokong lelaran, yang berpotensi untuk pertindihan dan tingkah laku yang tidak dijangka dalam kes tertentu.
- PHP 7: Menggunakan iterator boleh cincang yang tidak terjejas oleh gelung 'foreach' dan mengendalikan pengubahsuaian dengan betul semasa lelaran.
3. Adakah terdapat sebarang situasi di mana penggunaan fungsi yang melaraskan penunjuk tatasusunan semasa 'foreach' boleh menjejaskan hasil gelung?
-
PHP 5: 'each()' dan 'reset()' boleh mempengaruhi gelagat 'foreach' bersarang dan malah boleh menghadapi gelagat yang tidak dijangka akibat perlanggaran cincang.
-
PHP 7: Fungsi yang melaraskan penunjuk tatasusunan tidak mempunyai kesan pada tingkah laku 'foreach' kerana ia tidak lagi bergantung pada IAP.
Atas ialah kandungan terperinci Bagaimanakah Gelung `foreach` PHP Berfungsi dalam PHP 5 dan PHP 7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!