Wie funktioniert PHP „foreach“ eigentlich?
Foreach in PHP unterstützt die Iteration über drei Arten von Werten: Arrays, normale Objekte und Durchlaufbare Objekte.
Array und Objekt Iteration:
Für Arrays und Objekte ist der Iterationsmechanismus komplexer. PHP-Arrays sind eigentlich geordnete Wörterbücher, die entsprechend der Einfügereihenfolge durchlaufen werden. Die Iteration über einfache Objekte ähnelt der Iteration über Arrays, da Objekteigenschaften ebenfalls als Wörterbuch gespeichert werden.
Während der Iteration wird der interne Array-Zeiger nicht direkt verwendet. Stattdessen wird ein HashPointer verwendet, um den Überblick über das aktuelle Element zu behalten. Nachdem der Schleifenkörper ausgeführt wurde, wird der HashPointer wiederhergestellt, jedoch nur, wenn das Element noch vorhanden ist. Andernfalls wird der aktuelle Array-Zeiger verwendet.
Wenn das Array keine Referenz ist und einen Referenzzähler größer als 1 hat, wird es vor der Iteration dupliziert. Diese Duplizierung wird durchgeführt, um zu verhindern, dass IAP-Änderungen in das ursprüngliche Array gelangen.
Änderung während der Iteration:
PHP erlaubt Änderungen während der Iteration, was zu verwirrendem Verhalten führen kann . Wenn ein Element während der Iteration entfernt wird, wird der HashPointer nur dann zum nächsten Element verschoben, wenn der HashPointer-Sicherungs-/Wiederherstellungsmechanismus erfolgreich ist. Wenn dies fehlschlägt, wird stattdessen der aktuelle Array-Zeiger (der sich am Ende des Arrays befindet) verwendet.
Verschachtelte Schleifen können sich auch auf das Verhalten von foreach auswirken. Wenn das aktuelle Element der äußeren Schleife entfernt wird, stoppt die äußere Schleife nach der ersten Iteration, da die Wiederherstellung des HashPointers fehlschlägt.
PHP 7-Änderungen:
PHP 7 führte mehrere Änderungen an der foreach-Iteration ein:
Das obige ist der detaillierte Inhalt vonWie funktioniert die „foreach'-Schleife von PHP tatsächlich unter der Haube?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!