Ist diese spezielle Behandlung von Exit und Die in PHP dokumentiert?

8

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:

%Vor%

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?

    
Paulpro 07.05.2012, 02:32
quelle

4 Antworten

3

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.

    
salathe 19.05.2012, 19:09
quelle
4

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.

    
Mahmoud Al-Qudsi 19.05.2012 16:53
quelle
1

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.

    
Ben 07.05.2012 02:38
quelle
1

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.

    
Maxim Krizhanovsky 19.05.2012 16:24
quelle