Die 'foreach'-Schleife von PHP verstehen
'foreach' unterstützt die Iteration über drei Arten von Werten:
- Arrays
- Normale Objekte
- Durchlaufbar Objekte
Array- und Objektiteration
Arrays und Objekte werden als geordnete Wörterbücher durchlaufen. Das Durchlaufen einfacher Objekte ähnelt dem Durchlaufen von Arrays, da sie intern als geordnete Wörterbücher dargestellt werden.
Interne Änderungen während der Iteration
- By-Reference-Array-Iteration oder Iteration von Objekte (By-Handle-Semantik) ermöglichen eine In-Loop-Änderung während der Iteration.
- Iteration über Arrays mit Referenz Eine Anzahl größer als 1 kann das Array vor der Änderung duplizieren.
PHP 5-Ansatz
- Verwendet einen internen Array-Zeiger (IAP) zur Verfolgung der Position.
- Verwendet zusätzlich einen HashPointer, um mehrere gleichzeitige „foreach“ zu unterstützen. Schleifen.
- Array-Duplizierung tritt auf, wenn die Referenzanzahl größer als 1 ist und das Array keine Referenz ist.
- IAP-Fortschritt erfolgt bevor der Schleifenkörper ausgeführt wird.
PHP 7 Ansatz
- Gibt die IAP-Nutzung vollständig auf.
- Führt im Array registrierte Hashtabellen-Iteratoren ein, um Änderungen während der Iteration zu verarbeiten.
- Array-Duplizierung nach Wert Die Array-Iteration erfolgt nur, wenn das Array während der Schleife geändert wird.
- 'foreach'-Verhalten ist nein nicht mehr von „current()“ oder „reset()“ beeinflusst.
Antworten auf Ihre Fragen
1. Ist das richtig und die ganze Geschichte?
Ihr Verständnis von „foreach“ als Arbeit mit einer Array-Kopie, aber Auswirkungen auf den Array-Zeiger ist korrekt. Allerdings verwendet „foreach“ in PHP 7 nicht mehr den IAP und verlässt sich stattdessen auf Hashtable-Iteratoren, was zu einem konsistenteren und vorhersehbareren Verhalten führt.
2. Was macht es wirklich?
- PHP 5: Verwendet eine Kombination aus IAP und HashPointer, um Iterationen zu unterstützen, mit der Gefahr von Duplikaten und unerwartetem Verhalten in bestimmten Fällen.
- PHP 7: Verwendet Hashtable-Iteratoren, die von der „foreach“-Schleife nicht betroffen sind und Änderungen währenddessen ordnungsgemäß verarbeiten Iteration.
3. Gibt es Situationen, in denen die Verwendung von Funktionen, die den Array-Zeiger während eines „foreach“ anpassen, das Ergebnis der Schleife beeinflussen kann?
-
PHP 5: 'each()' und 'reset()' können das Verhalten verschachtelter 'foreach'-Schleifen beeinflussen und aufgrund von Hash-Kollisionen sogar zu unerwartetem Verhalten führen.
-
PHP 7:Funktionen, die den Array-Zeiger anpassen, haben keinen Einfluss auf das Verhalten von „foreach“, da es nicht mehr darauf angewiesen ist der IAP.
Das obige ist der detaillierte Inhalt vonWie funktioniert die „foreach'-Schleife von PHP in PHP 5 und PHP 7?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!