![How Does PHP's `foreach` Loop Work Internally, and How Has Its Implementation Changed Between PHP 5 and PHP 7?](https://img.php.cn/upload/article/000/000/000/173544475680207.jpg)
Wie funktioniert PHP „foreach“ eigentlich?
PHPs foreach iteriert über Arrays, Objekte und Traversable Objekte.
Arrays:
- Foreach iteriert über die Schlüssel und Werte eines Arrays.
- Änderungen während der Iteration können zu unerwartetem Verhalten führen.
- In PHP 5 verwendet foreach einen internen Array-Zeiger (IAP), der von mehreren gemeinsam genutzt werden kann Schleifen, was zu komplexem Verhalten führt.
- In PHP 7 verwendet foreach externe, sichere Hashtabellen-Iteratoren, wodurch der IAP überflüssig wird.
Objekte:
- Foreach iteriert über die Eigenschaften eines Objekts und Werte.
- Änderungen während der Iteration werden in der Schleife widergespiegelt.
- Dies liegt an der By-Handle-Übergabesemantik von PHP, die dafür sorgt, dass sich Objekte wie Referenzen verhalten.
Traversierbare Objekte:
- Foreach bietet im Wesentlichen eine Syntaktische Verknüpfung zum Durchlaufen von durchquerbaren Objekten.
Beispiele:
- Duplikation: PHP 5 dupliziert Arrays vor der Iteration, wenn das Array keine Referenz ist und hat eine Referenzanzahl größer als 1. PHP 7 vermeidet diese Duplizierung nach Möglichkeit.
- Position Advancement Order: Foreach rückt den Array-Zeiger vor, bevor der Schleifenkörper ausgeführt wird, sodass es auf Element i 1 funktioniert, während sich der Schleifenkörper noch auf Element i befindet.
- Änderung während der Iteration: Foreach überspringt entfernte Elemente in PHP 5 aufgrund seiner Abhängigkeit von das IAP. In PHP 7 iteriert foreach auch nach dem Entfernen von Elementen weiter.
- Reset() und Each(): In PHP 5 verhindern HashPointer-Sicherungs- und Wiederherstellungsmechanismen, dass reset() sich auf foreach auswirkt. In PHP 7 funktioniert reset() unabhängig von foreach.
- Ersetzte Entitäten: PHP ermöglicht die Ersetzung der iterierten Entität während der Schleife (z. B. beginnend mit einem Array und Wechsel zu einem Objekt).
Zusammenfassung:
PHPs foreach iteriert effizient über Arrays und Objekte, Bereitstellung eines bequemen Zugriffs auf ihre Elemente. Wenn Sie die Implementierungsdetails verstehen (insbesondere die Unterschiede zwischen PHP 5 und PHP 7), können Sie unerwartetes Verhalten beim Ändern von Arrays während der Iteration vermeiden.
Das obige ist der detaillierte Inhalt vonWie funktioniert die „foreach'-Schleife von PHP intern und wie hat sich ihre Implementierung zwischen PHP 5 und PHP 7 geändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!