Heim >Backend-Entwicklung >PHP-Tutorial >Wie funktioniert die „foreach'-Schleife von PHP tatsächlich und wie hat sich ihre Implementierung zwischen PHP 5 und PHP 7 geändert?
Einführung:
foreach wird in PHP häufig für Schleifen verwendet durch Arrays, Objekte und andere Datenstrukturen. Das Verständnis seines Innenlebens ist entscheidend, um unerwartetes Verhalten zu vermeiden.
Drei Arten von foreach-Iterables:
foreach unterstützt drei Arten von Iterables:
Iteration durchquerbarer Objekte:
Für durchquerbare Objekte fungiert foreach als syntaktischer Zucker für:
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(); // ... }
Array- und Objektiteration :
Bestellt Wörterbücher:
PHP-Arrays und -Objekte sind im Wesentlichen geordnete Wörterbücher, die die Einfügereihenfolge beibehalten. Die Iteration folgt dieser Reihenfolge.
Konvertierung von Objekten:
Gepackte Objektdarstellungen werden während der Iteration in Wörterbücher konvertiert. Die Plain-Object-Iteration ähnelt somit der Array-Iteration.
Interner Array-Zeiger (IAP):
Arrays in PHP 5 verfügen über einen internen Array-Zeiger (IAP), der Änderungen und Überspringen unterstützt über entfernte Elemente.
HashPointer:
foreach in PHP 5 verwendet einen HashPointer, um die IAP-Position und den Hash zu sichern, bevor der Schleifenkörper ausgeführt wird. Es stellt es anschließend wieder her, wenn das Element noch vorhanden ist. Andernfalls wird die aktuelle IAP-Position verwendet.
Array-Duplikation:
foreach in PHP 5 dupliziert Arrays, die keine Referenzen sind (is_ref=0) und einen Refcount größer als 1 haben.
PHP 5 Beispiele:
PHP 7-Änderungen:
Hashtable-Iteratoren:
PHP 7 verwendet externe Hashtabellen-Iteratoren, die im Array registriert sind. Jeder Iterator wird erweitert, wenn das entsprechende Element entfernt wird.
Keine IAP-Nutzung durch foreach:
foreach verwendet den IAP nicht mehr, sodass keine Duplizierung erforderlich ist. Bei der Iteration nach Wertarrays werden immer die ursprünglichen Elemente verwendet.
Array-Duplizierung:
Arrays werden während der Iteration nach Wert nicht mehr dupliziert, unabhängig von ihrem Refcount- oder Referenzstatus.
PHP 7-Beispiele:
Zusätzliche PHP 7-Verbesserungen:
Das obige ist der detaillierte Inhalt vonWie funktioniert die „foreach'-Schleife von PHP tatsächlich 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!