Klammern, die das Ergebnis eines Funktionsaufrufs in einen Ausdruck umwandeln
In PHP kann das Einschließen des Ergebnisses eines Funktionsaufrufs in Klammern überraschenderweise das Ergebnis in einen Ausdruck umwandeln Mehr Informationen, wie im folgenden Beispiel zu sehen ist:
<?php function get_array() { return array(); } function foo() { return reset((get_array())); } foo();
Der obige Code funktioniert fehlerfrei, obwohl es in der Dokumentation keine klare Erklärung gibt. Lassen Sie uns dieses Verhalten im Detail untersuchen.
Erste Bedingung: Nicht-Funktionsaufruf-Argument
Aufgrund der hinzugefügten Klammern identifiziert PHP das Argument nicht mehr als Funktionsaufruf, sondern als „expr_without_variable“. Diese Änderung beim Parsen wirkt sich darauf aus, wie der Code kompiliert wird, und entfernt letztendlich das Flag „Funktionsaufruf“ aus dem Opcode „SEND_VAR_NO_REF“.
Zweite Bedingung: Referenzanzahl 1
Die Zend Engine erlaubt gelegentlich Nichtreferenzen mit einer Referenzanzahl von 1, wenn Referenzen erwartet werden. In diesem Beispiel hat das zurückgegebene Array einen Referenzzähler von 1 und erfüllt diese Bedingung. Wenn jedoch von einer anderen Stelle auf das Array verwiesen würde, wäre die zweite Bedingung nicht erfüllt, was zu einem Fehler führen würde.
Fazit
Dieses Verhalten mag zwar praktisch erscheinen, ist es aber Es ist wichtig zu beachten, dass es sich nicht um eine dokumentierte Funktion handelt und als möglicher Fehler behandelt werden sollte. Sich darauf zu verlassen kann zu unerwarteten Fehlern und Instabilität im Code führen. Daher wird dringend empfohlen, diese Syntax zu vermeiden und stattdessen den richtigen Ausdruck zu verwenden, um Mehrdeutigkeiten zu vermeiden und vorhersehbare Ergebnisse sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum wird ein Funktionsaufruf in Klammern in einen Ausdruck in PHP umgewandelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!