Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung des Unterschieds zwischen PHP die() und Exit()

Detaillierte Erklärung des Unterschieds zwischen PHP die() und Exit()

墨辰丷
墨辰丷Original
2018-05-29 17:46:361969Durchsuche

Was ist der wirkliche Unterschied zwischen die() und exit() in PHP? Wir haben bei Baidu herausgefunden, dass die beendet wird und Speicher freigibt. Ist das wirklich der Fall? Referenz,

Suchen Sie online nach dem Unterschied zwischen Die- und Exit-Funktionen. Die meisten „Standardantworten“ besagen, dass Die beendet und Speicher freigibt, und Exit beendet, aber keinen Speicher freigibt.

Diese Erklärung ist offensichtlich falsch. Im PHP-Handbuch heißt es bereits: „Die – entspricht Exit().“ Ansonsten handelt es sich lediglich um Aliase völlig anders.

Ich war jedoch trotzdem neugierig und beschloss, im Quellcode nach Hinweisen zu suchen, um zu sehen, wie PHP mit diesem „Alias“ umgeht.

Zuallererst muss klar sein, dass „Die“ und „Exit“ beide „Sprachkonstrukte“ und keine Funktionen sind. Es gibt auch viele Leute im Internet, die sagen, dass „so und so“ einen Rückgabewert hat und ist Eine Funktion und so und so haben einen Rückgabewert und sind eine Struktur. Viele Anfänger kennen den Unterschied zwischen Sprachstruktur und Funktion nicht, in Laienbegriffen kann die Sprachstruktur als Symbol der Grammatik verstanden werden selbst. Dinge wie +, -, *, / sind ebenfalls Sprachstrukturen, if, else, for, while sind alles Sprachstrukturen. ist Teil der Grammatik selbst. Jede Sprache verfügt über diese Dinge, denn wenn der Computer + sieht, denkt er nicht, dass es hinzugefügt werden sollte. Dazu muss ein Compiler ihn in Maschinencode umwandeln, einen Befehlssatz, den die CPU erkennen kann.

Der gesamte Prozess, wenn PHP den Quellcode ausführt, besteht darin, zunächst Sprachstrukturen wie echo und if im Quellcode in Token wie T_ECHO und T_IF zu konvertieren, wie in zend_lingual_scanner.l definiert, und der Quellcode wird Entfernen Sie Leerzeichen und kommentieren Sie diese Zeichen aus, die nichts mit der Programmlogik zu tun haben. , werden einige kurze Ausdrücke gebildet, was die Phase der lexikalischen Analyse darstellt. Diese Token werden dann in Operationscodes umgewandelt, wie in zend_vm_opcodes.h definiert. Führen Sie diese Operationscodes dann nacheinander aus.

Das Obige erklärt grob den Kompilierungs- und Ausführungsprozess von PHP sowie die Definition der Sprachstruktur. Kommen wir zum Punkt.

Wir sollten auch bedenken, dass es in PHP viele Alias-Funktionen gibt, wie zum Beispiel „implode“ und „join“. Unabhängig davon, ob es sich um eine Alias-Funktion oder eine Alias-Sprachstruktur handelt, sind sie aus Sicht der tatsächlichen Wirkung gleich, aber die Methode zur Verarbeitung des Quellcodes ist definitiv unterschiedlich.

Sehen wir uns zunächst an, wie diese Alias-Sprachstruktur gehandhabt wird, und schauen wir uns später die Alias-Funktion an.

zend_lingual_parser.c definiert ein Makro

#define T_EXIT 300

und definiert auch eine Aufzählung, die auch

enum yytokentype {
…
T_EXIT = 300,
….
}
enthält

Hier erfahren wir, dass der T_EXIT-Token den Code 300 hat.

Schauen Sie sich zend_lingual_scanner.l an, das diese Codezeilen enthält.

<ST_IN_SCRIPTING>”exit” {
return T_EXIT;
}
<ST_IN_SCRIPTING>”die” {
return T_EXIT;
}

Wenn PHP eine lexikalische Analyse durchführt, gibt es natürlich das T_EXIT-Token zurück, unabhängig davon, ob es auf Exit oder Tod stößt. Von hier aus können wir beweisen, dass Die und Exit sowie die interne Verarbeitung von PHP genau gleich sind.

Sie können auch den folgenden PHP-Code verwenden, um Folgendes zu ermitteln:

<?php
var_dump(token_get_all(“<?php die;exit;?>”));

Die Token-Codes, die in der zurückgegebenen Datei sterben und beenden Die Ergebnisse sind beide: Es ist 300.

Was nun das Thema „Die“ und „Exit“ betrifft, denke ich, dass jeder bestätigen kann, dass die Namen einfach unterschiedlich sind, aber der Effekt derselbe ist. Es gibt kein sogenanntes Problem des Entladens oder Der Speicher wird nicht entladen.

PHP-Handbuch: die()Entspricht exit().

Erklärung: die() und exit() sind beide Funktionen zum Beenden der Skriptausführung. Tatsächlich verweisen die beiden Namen Exit und die auf dieselbe Funktion und die() ist ein Alias ​​von Funktion „exit()“. Diese Funktion akzeptiert nur einen Parameter, der ein von einem Programm zurückgegebener Wert oder eine Zeichenfolge sein kann, oder es können keine Parameter eingegeben werden und das Ergebnis ist kein Rückgabewert.

Referenz: Obwohl die beiden gleich sind, gibt es bei ihrer üblichen Verwendung subtile Selektivität. Beispiel:
Wenn der an die Funktionen „exit“ und „die“ übergebene Wert 0 ist, bedeutet dies, dass die Ausführung des Skripts vorzeitig beendet wird, normalerweise unter dem Namen „exit()“.

echo "1111";
exit(0);
echo "2222";
//22222不会被输出,因为程序运行到exit(0)时,脚本已经被提前终止,“马上断气”。

Wenn das Programm einen Fehler macht, können Sie ihm einen String übergeben, der so wie er ist auf dem Systemterminal ausgegeben wird, normalerweise unter dem Namen die() .

$fp=fopen("./readme.txt","r") or die("不能打开该文件");

Wenn in diesem Fall die fopen-Funktion aufgerufen wird und den booleschen Wert false zurückgibt, beendet die() das Skript sofort und gibt den übergebenen Wert aus es sofort String: „Du kannst ein oder zwei Worte sagen, bevor du stirbst.“

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.


Verwandte Empfehlungen:

PHP+MySQL-Analyse der Methode zur Implementierung der Nachrichtenwarteschlange

Wie man die PHP-Variable in den Textbereich des Front-End-HTML einschließt und wie man die Newline-Änderung im PHPBackend

Detaillierte Erklärung der gespeicherten MySQL-Prozedur. Und PHP ruft die Instanz der gespeicherten MySQL-Prozedur auf

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen PHP die() und Exit(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn