Ich habe gerade die Seite auf Ausdrücke in den PHP-Dokumenten gelesen, und zwar direkt bei Oben steht:
Die einfachste und dennoch genaueste Methode zum Definieren eines Ausdrucks ist "alles, was einen Wert hat".
Diese einfache Definition enthält alle Funktionen und die meisten Sprachkonstrukte, jedoch gibt es einige Sprachkonstrukte, die explizit angeben, dass sie keinen Wert zurückgeben.
Hier ist eine Liste von Sprachkonstrukten, die einen Wert zurückgeben:
Hier sind die interessantesten, die keinen Wert zurückgeben und daher keine Ausdrücke sind:
Ich finde die
und exit
von besonderem Interesse, weil sie als Ausdrücke in PHP verwendet werden können, obwohl sie keine Rückgabewerte haben. Die folgenden Codezeilen werfen wie erwartet einen Syntaxfehler ab:
Der folgende PHP-Code ist jedoch völlig frei von Syntaxfehlern:
%Vor% Ich habe die PHP-Dokumente durchgelesen und finde keine Erwähnung dieser speziellen Behandlung von Die () und Beenden (). Wissen PHP-Experten, ob dies irgendwo dokumentiert ist? Ist dies das beabsichtigte Verhalten und ist das isset($_GET['bar']) or die();
-Muster sicher zu verwenden; könnte es in einer zukünftigen Version von PHP plötzlich brechen?
die
und exit
(sie teilen das Token T_EXIT
) fallen unter die Regeln für expr_without_variable
während der Analysephase, weshalb PHP froh ist, sie in einem Ausdruckskontext zu haben, ohne einen Syntaxfehler zu geben.
Wissen PHP-Experten, ob dies irgendwo dokumentiert ist?
Es gibt keine Beschreibung der Sonderbehandlung im PHP-Handbuch, jedoch die zuerst Beispiel auf der Handbuchseite exit
zeigt an, dass es als … or exit
verwendet wird.
Ist dies das beabsichtigte Verhalten und ist das
isset($_GET['bar']) or die();
-Muster sicher zu verwenden; könnte es in einer zukünftigen Version von PHP plötzlich brechen?
Ja. Ja. Alles ist möglich, aber unwahrscheinlich.
PHP erkennt keine Fehler außer zur Laufzeit, wenn der Codepfad erreicht ist. Im Gegensatz zu vielen anderen Sprachen listet es die Fehler nicht auf, wenn die Seite "kompiliert" wird - so werden Sie nur Fehler sehen, wenn ihre entsprechenden Zeilen des Quellcodes ausgeführt werden.
In Ihrem Beispiel ist die Auswertung des Rückgabewerts von exit
oder die
niemals erfolgt . PHP meldet keinen Fehler, weil es nie versucht hat, das Ergebnis überhaupt auszuwerten, da der Thread beendet wurde.
Eine wilde Vermutung ist, dass die
und exit
einen Wert zurückgeben, aber nie zurückgegeben werden, da die Ausführung gestoppt wird, bevor sie zurückgegeben wird.
Dies wurde möglicherweise implementiert, um den Funktionen die
und exit
eine gewisse "Nützlichkeit" hinzuzufügen.
stirbt und beendet den Rückgabewert, dieser Wert muss jedoch von dem Programm verwendet werden, das das PHP-Skript aufgerufen hat. Dieser Kommentar beschreibt das Verhalten.
Tags und Links php expression language-construct