Heim > Artikel > Backend-Entwicklung > Warum funktioniert die String-Interpolation von PHP mit assoziativen Arrays auch ohne geschweifte Klammern?
Interpolation assoziativer Arrays in PHP: Unerwartetes Verhalten aufdecken
Die String-Interpolation von PHP bietet eine praktische Möglichkeit, Variablen in Strings einzubetten. Bei der Arbeit mit assoziativen Arrays kann das Interpolationsverhalten jedoch von den Erwartungen abweichen.
Beachten Sie den folgenden Codeausschnitt:
<code class="php">$ha = ['key1' => 'Hello to me']; print $ha['key1']; // correct (usual way) print $ha[key1]; // Warning, works (use of undefined constant) print "He said {$ha['key1']}"; // correct (usual way) print "He said {$ha[key1]}"; // Warning, works (use of undefined constant) print "He said $ha['key1']"; // Error, unexpected T_ENCAPSED_AND_WHITESPACE print "He said $ha[ key1 ]"; // Error, unexpected T_ENCAPSED_AND_WHITESPACE print "He said $ha[key1]"; // !! correct (How Comes?)</code>
Beachten Sie die letzte Zeile des Codes:
<code class="php">print "He said $ha[key1]";</code>
Überraschenderweise wird diese Zeile korrekt ausgeführt, obwohl sie eine scheinbar falsche Syntax verwendet. Um dieses Verhalten zu verstehen, beschäftigen wir uns mit dem Interpolationsmechanismus von PHP.
PHP ermöglicht die Variableninterpolation mit zwei Syntaxen:
Bei assoziativen Arrays wird in der Dokumentation explizit die zweite Syntax empfohlen. Der Interpolationsmechanismus von PHP enthält jedoch eine spezielle Ausnahme für den Zugriff auf assoziative Array-Elemente innerhalb von Zeichenfolgen in doppelten Anführungszeichen.
Wenn eine Variable in doppelten Anführungszeichen einen Schlüssel enthält, der nicht in geschweiften Klammern eingeschlossen ist, geht der Interpreter davon aus, dass es sich um einen Assoziativ handelt Array-Schlüssel. Diese Interpretation gilt auch dann, wenn der Schlüssel durch Leerzeichen oder andere Leerzeichen von den eckigen Klammern getrennt ist.
Damit wird die folgende Zeile als gültige Interpolation erkannt:
<code class="php">print "He said $ha[key1]";</code>
Abschließend while Da es laut PHP-Interpreter als „richtig“ gilt, kann dieses Interpolationsverhalten unerwartet sein. Die empfohlene Syntax zum Interpolieren assoziativer Array-Elemente in Strings bleibt jedoch die Verwendung von geschweiften Klammern, da sie ein konsistentes und vorhersehbares Verhalten über verschiedene PHP-Versionen hinweg gewährleistet und die Kompatibilität mit zukünftigen Versionen gewährleistet.
Das obige ist der detaillierte Inhalt vonWarum funktioniert die String-Interpolation von PHP mit assoziativen Arrays auch ohne geschweifte Klammern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!