Ich glaube, dass alle diese (und sogar die()
oder die(0)
) identisch sind. Wenn sie nicht identisch sind, welche wird zum erfolgreichen Beenden eines Skripts bevorzugt? Wenn sie identisch sind, gibt es einen bevorzugten Standard für den erfolgreichen Abschluss des Skripts? Ich neige dazu zu benutzen exit;
.
EDIT: Alle Antworten haben " die()
und exit()
sind identisch", obwohl ich das in meiner Frage sage. Ich habe den Titel aktualisiert, um hoffentlich klarer zu machen, dass dies NICHT meine Frage ist. Ich möchte den Erfolg eines Befehlszeilenskripts klar anzeigen.
return
hat eine andere ImplikationAntworten:
Diese sind alle identisch. Ich bin mir ziemlich sicher, dass dies
die()
nur ein direkter Alias istexit()
, aber selbst wenn dies nicht der Fall ist, verhält es sich immer noch identisch.Wenn eine dieser Funktionen ein Zeichenfolgenargument erhält, druckt sie die Zeichenfolge aus, bevor der Prozess beendet wird. Wenn eine Ganzzahl unter 255 gefunden wird, wird diese Ganzzahl als Rückkehrcode für den Prozess betrachtet, der an den Prozess zurückgegeben wird, der das PHP-Skript aufgerufen hat. Dies ist besonders nützlich, wenn Sie Befehlszeilenanwendungen schreiben (PHP ist nicht nur im Internet verfügbar!).
Was den Unterschied zwischen
exit
,exit()
undexit(0)
gibt es wirklich keine. Es gibt definitiv keinen Unterschied zwischen den ersten beiden, daexit
es sich technisch gesehen um ein Sprachkonstrukt handelt, nicht um eine Funktion, so dass es genau wie mit oder ohne Klammern aufgerufen werden kannecho
. Die Rückgabe eines Code of0
bedeutet "Dieses Programm wurde erfolgreich / ohne Fehler ausgeführt", und obwohl ich nicht weiß, was genau passiert, wenn Sie kein Argument übergeben, sagt PHP.net , dass ein Argument ohneexit
Erfolg anzeigt, also würde ich wetten es wird zurückgegeben0
, obwohl PHP.net erneut keine Standardeinstellung für das Argument anzeigt .quelle
exit(0)
bedeutet mit Erfolg beenden,exit(1)
bedeutet mit Misserfolg beenden.exit
(oderdie
) mit einem String-Parameter aussehen würde. Wenn man zB die gängigedie(-1)
Redewendung gesehen hat und auchdie("Poo!...")
viel ruft, ist man sich vielleicht doch nicht so sicher, und trotzdem: Raten sollte zu anderen Berufen gehören ... Also, FTR: es ist 0. Was auch bedeutet, dass Letzteresdie("error!")
am meisten wäre wahrscheinlich tatsächlich ein Fehler in CLI-Skripten! : -oWie bereits erwähnt, sind die () und exit () genau gleich.
Wenn Sie sich die PHP-Dokumentation ansehen , gibt es zwei Möglichkeiten für Argumente:
Ein numerischer Wert. Dies ist nur nützlich, wenn Sie PHP über die Befehlszeile verwenden, im Gegensatz zu einem Webserver. Ein Wert von Null zeigt Erfolg an. Ein Wert ungleich Null zeigt an, dass ein Fehler aufgetreten ist.
Ein Zeichenfolgenwert. Dies wird dem Browser beim Beenden angezeigt.
Anstelle von die () oder exit () empfehle ich die Verwendung von Ausnahmen und eines benutzerdefinierten Ausnahmebehandlers der obersten Ebene, um die Fehlerbedingungen zu verwalten.
Auf diese Weise haben Sie mehr Flexibilität, um beispielsweise die automatische Fehlerprotokollierung durchzuführen. Wenn Sie PHP zum Implementieren einer JSON-API verwenden, kann dieser Ausnahmebehandler stattdessen ein gültiges, fehleranzeigendes JSON-Snippet zurückgeben.
quelle
Ich würde sagen, dass in Bezug auf eine bessere Semantik
die($arg);
für eine abnormale oder unerwartete Beendigung verwendet werden sollte, auch wenn Sie sie natürlich noch gefangen haben. Undexit($arg);
sollte für ein normales (erwartetes / kontrolliertes) Ende eines Prozesses verwendet werden, wiebreak;
für einfor
oderwhile
oder eineswitch
Struktur, aber mit einem endgültigen Ende.Trotzdem .. Ich persönlich verwende oft eine allgemeine
if { } else { }
Struktur, um verschiedene Zweige großer Prozesse oder die Ausgabepufferung zu steuern, ohne "exit" verwenden zu müssen.Ich verwende auch
die($arg)
in einfachen fehlerfängenden Semantiken wie in$db = mysql_connect([$args]) or die ($error);
...quelle
die();
ist nur ein Synonym fürexit();
und ist funktional identisch.Die Standardmethode besteht darin, den Exit-Code Null zu verwenden, um den Erfolg anzuzeigen, und alles andere, um eine Fehlerbedingung anzuzeigen.
quelle
die () wird normalerweise verwendet, um das Skript mit einer Fehlerausgabe zu beenden:
die("There was a fatal error");
where-as-Exit wird normalerweise als erfolgreicher Exit verwendet (zumindest in meiner Codierung)
Das PHP-Handbuch besagt, dass die Funktionen identisch sind.
quelle
Ich werde zur Hölle herabgestimmt , aber in einigen Fällen wollen wir beim Hacken in CLI nicht, dass das Programm getötet wird, während wir nicht die vollständige Ausführung fortsetzen wollen.
Hier besteht das Ziel darin, API-Aufrufe einer separaten Handpunktdatei zu vermeiden. Angenommen, ich habe eine nette Wiedergabetaste in meiner Benutzeroberfläche, die Systemaufrufe ausführt.
Beispiel 1: Das Programm wird nach dem Job beendet, es werden keine Daten zurückgegeben. Das ist nicht erwünscht.
if ($_GET["play"] != ""){ // Some job exit; } /* Huge amount of data*/
Beispiel 2: Das Programm wird weiterhin ausgeführt und füttert die gesamten Daten in der GET-Anforderung. Dies ist in diesem Fall nicht erforderlich. Dies verlangsamt den Browser mit allen Daten, die er bereits hat.
if ($_GET["play"] != ""){ // Some job } /* Huge amount of data*/
Beispiel 3: Die Programm läuft noch , es wurden keine Daten wie erwartet zurückgegeben, der Wiedergabebefehl wurde ausgeführt, aber der gesamte Datensatz wird analysiert. Dies ist ein unnötiger Job. Dies kann PHP / den Computer verlangsamen.
/* Huge amount of data*/ if ($_GET["play"] != ""){ // Some job }
Beispiel 4: Die Programm läuft noch , es wurden keine Daten wie erwartet zurückgegeben, der Wiedergabebefehl wurde ausgeführt, die gesamten Daten wurden nicht analysiert, PHP gab wie erwartet superschnell 200OK mit einer leeren Antwort zurück. Alle glücklich!
if ($_GET["play"] != ""){ // Some job goto END; } /* Huge amount of data*/ END;
Ja! Die Verwendung von GOTO ist manchmal als das Beste zu betrachten 🔨 -!
https://www.php.net/manual/en/control-structures.goto.php
quelle
die
ist genau gleichbedeutend mitexit
.Aus dem Handbuch :
Dies ist nur nützlich, wenn Sie eine Art Wrapper haben, der etwas basierend auf dem Exit-Status ausführt. Es sei denn, Sie müssen speziell einen Exit-Code an die Außenwelt melden
exit;
.quelle