


PHP Foreach Pass by Reference Enigma: Mysterious Last Element Duplication
Wenn Sie in PHP die foreach-Schleife mit einer Pass-by- Bei der Referenzzuweisung (z. B. foreach ($arr as &$item)) kann es zu unerwartetem Verhalten kommen. Betrachten Sie dieses verwirrende Beispiel:
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) { /* do nothing by reference */ } print_r($arr); foreach ($arr as $item) { /* do nothing by value */ } print_r($arr); // $arr has inexplicably changed
Dieser Code gibt Folgendes aus:
Array ( [0] => foo [1] => bar [2] => baz ) Array ( [0] => foo [1] => bar [2] => bar )
Erklärung der Duplikation
Nach der ersten foreach-Schleife jedes Element von $arr wird immer noch von $item referenziert. Wenn die zweite Schleife iteriert, ersetzt sie den Wert jedes Elements durch den Wert von $item, das zufällig das letzte Element des Arrays ist. Dies bedeutet, dass jedes Element von $arr auf den Wert von $arr[2] gesetzt wird, was zur Duplizierung des letzten Elements in der Ausgabe führt.
Debuggen der Ausgabe
Um dieses Verhalten zu veranschaulichen, debuggen wir die Ausgabe, indem wir print-Anweisungen zu jeder foreach-Iteration hinzufügen:
foreach ($arr as &$item) { echo "Item: $item<br>"; print_r($arr); echo "<br>"; } foreach ($arr as $item) { echo "Item: $item<br>"; print_r($arr); echo "<br>"; }
Dies gibt Folgendes aus:
Item: foo Array ( [0] => foo [1] => bar [2] => baz ) Item: bar Array ( [0] => foo [1] => bar [2] => baz ) Item: baz Array ( [0] => foo [1] => bar [2] => baz ) Item: foo Array ( [0] => foo [1] => bar [2] => foo ) Item: bar Array ( [0] => foo [1] => bar [2] => bar ) Item: bar Array ( [0] => foo [1] => bar [2] => bar )
Sie können deutlich sehen, dass jedes Element von $arr wird auf den Wert von $item gesetzt, der während der zweiten foreach-Schleife zum letzten Element des Arrays wechselt.
Fehler oder beabsichtigtes Verhalten?
Dies Verhalten ist kein Fehler. Es ist eine Folge der Referenzübergabe. Die foreach-Schleife weist einfach den Wert des aktuellen Elements der im Schleifenheader angegebenen Variablen zu. In diesem Fall ändern wir durch die Referenzierung von $item die ursprünglichen Array-Elemente in der zweiten Schleife. Dies entspricht dem folgenden Code:
for ($i = 0; $i <p>Daher ist das beobachtete Verhalten kein Fehler, sondern ein Ergebnis der beabsichtigten Semantik der Pass-by-Reference in PHP. Um ein solches Verhalten zu vermeiden, verwenden Sie in der zweiten foreach-Schleife die Wertübergabe, indem Sie einfach den Wert jedes Elements $item zuweisen: foreach ($arr as $item).</p>
Das obige ist der detaillierte Inhalt vonWarum wird das letzte Element in der Foreach-Schleife von PHP mit Pass-by-Reference dupliziert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Alipay PHP ...

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung