Was sind die Unterschiede zwischen die () und exit () in PHP?

678

Was sind die Unterschiede die()und exit()Funktionen in PHP?

Ich denke, beide haben die gleiche Funktionalität, aber ich bezweifle, dass beide etwas anderes haben ... was ist das?

Coderex
quelle
2
exit () beendet das Programm nur mit einem numerischen Exit-Status, während die () die Fehlermeldung an stderr druckt und mit dem Status EXIT_FAILURE beendet wird. so exit() is exit and die() is also exit :)
Muhammad Shahzad

Antworten:

541

Es gibt keinen Unterschied - sie sind gleich.

PHP Handbuch für exit:

Hinweis: Dieses Sprachkonstrukt entspricht die().

PHP Handbuch für die:

Dieses Sprachkonstrukt entspricht exit().

Marek Karbarz
quelle
17
Mit Aliasen können Programmierer das verwenden, mit dem sie vertraut sind. Ich erinnere mich, dass ich besser gegangen bin als gestorben. Einige andere erinnern sich, dass sie besser sterben als gehen.
Mauris
28
Dies ( php.net/manual/en/aliases.php ) könnte eine Erklärung geben, warum 2 Funktionen dasselbe tun
Marek Karbarz
86
Obwohl sie dasselbe tun, reserviere ich normalerweise diefür fehlerbezogene Stopps und exitfür alle anderen Szenarien. Es scheint einfach besser zu fließen, wenn man den Code liest.
nextgentech
7
Es tut mir leid, dies wiederzubeleben, aber zumindest für mich ... dieist das Schreiben viel schneller als exit... Ich fange an zu verwenden, exitweil es für Nicht-PHP-Programmierer besser lesbar ist, aber dienur schneller zu tippen ist, wenn Sie gerade dabei sind Eile. Außerdem muss ich beim Tippen nicht die Position meiner Hände ändern, um schreiben zu können die.
Alejandro Iván
7
@mauris, es ist viel besser für eine Funktion, nur einen Namen zu haben . Stellen Sie sich vor, jede PHP-Funktion hat zwei Namen, das wäre ein komplettes Durcheinander .
Pacerier
221

UNTERSCHIED IM URSPRUNG

Der Unterschied zwischen die()und exit()in PHP ist ihre Herkunft .


FUNKTIONAL GLEICHWERTIG

die()und exit()sind äquivalente Funktionen.

PHP-Handbuch

PHP Handbuch für die:

Dieses Sprachkonstrukt entspricht exit().

PHP Handbuch für exit:

Hinweis: Dieses Sprachkonstrukt entspricht die().

PHP-Handbuch für die Liste der Funktions-Aliase :

die ist ein Alias ​​für die Master-Funktion exit()


UNTERSCHIEDLICH IN ANDEREN SPRACHEN

die()und exit()sind unterschiedlich in anderen Sprachen , aber in PHP sind sie identisch.

Aus einem weiteren PHP-Rant :

... Als C- und Perl-Codierer war ich bereit zu antworten: "Warum, exit () beendet das Programm nur mit einem numerischen Exit-Status, während die () die Fehlermeldung an stderr druckt und mit dem Status EXIT_FAILURE beendet. "" Aber dann erinnerte ich mich, dass wir uns im chaotischen Syntaxland von PHP befinden.

In PHP sind exit () und die () identisch.

Die Designer dachten offensichtlich: "Hmm, lasst uns exit () von C ausleihen . Und Perl-Leute werden es wahrscheinlich mögen, wenn wir die () nehmen, wie es auch von Perl ist. Ups! Wir haben jetzt zwei Exit-Funktionen! Machen wir es so, dass sie beide kann einen String oder eine Ganzzahl als Argument nehmen und sie identisch machen! "

Das Endergebnis ist, dass dies die Dinge nicht wirklich "einfacher" machte, sondern nur verwirrender. C- und Perl-Codierer verwenden weiterhin exit (), um nur einen ganzzahligen Exit-Wert zu werfen, und die (), um eine Fehlermeldung zu werfen und mit einem Fehler zu beenden. Neulinge und PHP als Erstsprache werden sich wahrscheinlich fragen: "ähm, zwei Exit-Funktionen, welche soll ich verwenden?" Das Handbuch erklärt nicht, warum es exit () und die () gibt.

Im Allgemeinen hat PHP eine Menge seltsamer Redundanzen wie diese - es versucht, freundlich zu Menschen mit unterschiedlichem Sprachhintergrund zu sein, aber dabei entsteht verwirrende Redundanz.

Geoffrey Hale
quelle
14
Obwohl es sich um die 100. Antwort handelt, die besagt, dass sie gleichwertig sind (wie auch in meiner Antwort zu sehen ^^), fügt dies wirklich einige SEHR gute Punkte hinzu. Vor allem, dass sie in anderen Sprachen NICHT gleich sind (daher in erster Linie die Verwirrung). (+1)
Levite
@Levit, nein, nein, du verstehst es total falsch . Niemand besitzt Namen und verschiedene Sprachen verwenden dieselben Namen auf ungleiche Weise wieder. Das ist in Ordnung, weil wir keine weitere Standardmethode benötigen . Die "Verwirrung an erster Stelle" ist darauf zurückzuführen, dass PHP einer Funktion zwei verschiedene Namen zuweist .
Pacerier
2
@ Pacerier: Sicher, wenn man es unter dem Gesichtspunkt "Wer ist schuld?" Betrachtet, ist das absolut richtig. Es ist aber auch eine Tatsache, dass sie einfach verschiedene Dinge in mehreren Sprachen bedeuten (was in Ordnung ist). Wenn man es aus einer neutralen Perspektive betrachtet, gilt es definitiv: Es gibt Verwirrung aufgrund der unterschiedlichen Bedeutungen (auch wenn es PHPs Schuld ist, zwei Aliase mit gleichen Funktionen zu erstellen). Ich wollte definitiv keinen Finger auf eine dieser Sprachen richten, wenn Sie das aus meinem Kommentar verstanden haben ... (großartig xkcd btw (Y) ^^)
Levite
2
Dies sollte auf jeden Fall die gewählte Antwort sein, gute Beschreibung!
Cody Brown
Ein anderer Benutzer, der geantwortet exit()hat und die Verbindung währenddessen nicht die()schließt, scheint relevant zu sein.
ner0
62

Wie bereits erwähnt, erzeugen diese beiden Befehle dasselbe Parser-Token.

ABER

Es gibt einen kleinen Unterschied, und so lange braucht der Parser, um das Token zurückzugeben.

Ich habe den PHP-Parser nicht studiert, aber wenn es sich um eine lange Liste von Funktionen handelt, die mit "d" beginnen, und eine kürzere Liste, die mit "e" beginnt, muss es eine Zeitstrafe geben, die den Funktionsnamen für Funktionen nachschlägt, die mit "beginnen". e ". Und es kann andere Unterschiede geben, weil der gesamte Funktionsname überprüft wird.

Ich bezweifle, dass es messbar sein wird, wenn Sie nicht eine "perfekte" Umgebung haben, die sich dem Parsen von PHP widmet, und viele Anfragen mit unterschiedlichen Parametern. Aber es muss einen Unterschied geben, schließlich ist PHP eine interpretierte Sprache.

Bob
quelle
4
@Zeitlos würden Perfektionisten nicht sagen "PHP ist eine interpretierte Sprache". PHP ist eine Sprache, die je nach Server-Setup entweder interpretiert oder kompiliert werden kann.
Pacerier
29
Und ... "sterben" ist 3 Zeichen lang gegen 4 für "exit". So werden 25% weniger Speicher und Dateispeicher benötigt! ;)
Jan Derk
2
'"Wenn es sich um eine lange Liste von Funktionen handelt, die mit" d "beginnen, und um eine kürzere Liste, die mit" e "beginnt, muss eine Zeitstrafe verhängt werden, die den Funktionsnamen für Funktionen nachschlägt, die mit" e "beginnen bedeuten, dass die Zeitstrafe passieren würde, wenn die Funktion beginnend mit d ? nachgeschlagen wird. Je größer die Liste, desto länger ist normalerweise die Zeit, um einen Gegenstand darin zu finden.
Pere
9
Wie Sie geschrieben haben, haben Sie den PHP-Parser nicht studiert. Vielen Dank für diese nutzlose Antwort, da sie auf Ihren Träumen basiert, wie PHP implementiert wird.
Dolmen
44

PHP Handbuch auf die :

sterben - Entspricht dem Beenden

Sie können sogar die;das Gleiche tun wie exit;- mit oder ohne Parens.

Der einzige Vorteil bei der Wahl die()über exit(), kann die Zeit , die Sie auf die Eingabe einen zusätzlichen Brief verschonen sein ;-)

Levit
quelle
1
Es ist auch praktisch, wenn jemand aus einer anderen Sprache kommt, wenn er in irgendeiner Weise vertraut ist
Rohan Khude
Beachten Sie, dass , wenn mit PHP interaktiv ( php -a) die;, die();, exit;und exit();haben keine Wirkung, während exit(ohne Semikolon) interaktiven Modus verlässt.
Santiago Aristi
31

Wie alle anderen richtigen Antworten sagen, dieund exitsind identisch / Aliase.

Obwohl ich eine persönliche Konvention habe, die ich verwende, wenn ich die Ausführung eines Skripts beenden möchte, wenn es erwartet und gewünscht wird exit;. Und wenn ich die Ausführung aufgrund einiger Probleme beenden muss (konnte keine Verbindung zu db herstellen, kann nicht in eine Datei schreiben usw.), verwende ich die("Something went wrong.");das Skript , um es zu "töten".

Wenn ich exit benutze:

header( "Location: http://www.example.com/" ); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit; // I would like to end now.

Wenn ich sterbe:

$data = file_get_contents( "file.txt" );
if( $data === false ) {
    die( "Failure." ); // I don't want to end, but I can't continue. Die, script! Die!
}
do_something_important( $data );

Auf diese Weise exitweiß ich , wenn ich irgendwann in meinem Code sehe, dass ich an diesem Punkt beenden möchte, weil die Logik hier endet. Wenn ich sehe die, weiß ich, dass ich die Ausführung fortsetzen möchte, aber ich kann oder sollte aufgrund eines Fehlers in der vorherigen Ausführung nicht.

Dies funktioniert natürlich nur, wenn Sie nur an einem Projekt arbeiten. Wenn es mehr Leute gibt, wird niemand sie daran hindern, sie zu benutzen dieoder exitwenn es nicht meinen Konventionen entspricht ...

Lukas
quelle
29

Hier ist etwas, das ziemlich interessant ist. Obwohl exit()und die()äquivalent sind, die() schließt die Verbindung. exit() schließt die Verbindung nicht.

die()::

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

exit()::

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

Ergebnisse:

exit()::

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

die()::

HTTP/1.1 304 Not Modified 
Connection: close

Nur für den Fall, dass Sie dies für Ihr Projekt berücksichtigen müssen.

Credits: https://stackoverflow.com/a/20932511/4357238

Edward
quelle
1
Dies sollte die akzeptierte Antwort sein.
ner0
2
Gerade getestet und exitund auf diedie gleiche Weise arbeiten, sie beide enge Verbindung.
Grzegorz Adam Kowalski
12

In Bezug auf die Funktionalität sind sie identisch, aber ich verwende sie in den folgenden Szenarien, um Code lesbar zu machen:

Verwenden Sie die (), wenn ein Fehler auftritt und die Ausführung gestoppt werden muss.

z.B die( 'Oops! Something went wrong' );

Verwenden Sie exit (), wenn kein Fehler vorliegt und die Ausführung gestoppt werden muss.

z.B exit( 'Request has been processed successfully!' );

aagjalpankaj
quelle
11

Diese Seite sagt, dieist ein Verbündeter von exit, also sind sie identisch. Erklärt aber auch:

Es gibt Funktionen, die Namen aufgrund einer API-Bereinigung oder aus einem anderen Grund geändert haben, und die alten Namen werden aus Gründen der Abwärtskompatibilität nur als Aliase beibehalten. Es ist normalerweise eine schlechte Idee, diese Art von Aliasen zu verwenden, da sie möglicherweise veraltet sind oder umbenannt werden, was zu nicht portierbaren Skripten führt.

Nennen Sie mich also paranoid, aber diein Zukunft wird es vielleicht nichts mehr geben.

Pedram Behroozi
quelle
3
Er sagt auch , In einigen Fällen gibt es keine bevorzugten Namen unter den mehrfachen ist, is_int()und is_integer()sind gleich gut zum Beispiel. Mit Blick auf den php-srcCommit-Verlauf auf GitHub befindet sich das die()Konstrukt mindestens seit 1999 in PHP, als es in ein SVN-Repository konvertiert wurde, und wahrscheinlich solange die Sprache existiert. Es scheint absurd, sich vorzustellen, dass es jemals veraltet sein wird.
Mark Amery
2
@ MarkAmery, Während seine Prämissen nicht zu seiner Schlussfolgerung führen, ist die Schlussfolgerung selbst gültig: ~ "Nenn mich paranoid, aber es kann exitin Zukunft keine geben. Oder es kann diein Zukunft keine geben"
Pacerier
@ Pacerier Ganz richtig. Möglicherweise gibt es in Zukunft kein PHP mehr. Lassen Sie uns also alle diesen Programmier-Gig beenden und Bestatter oder Steuereintreiber werden. Schließlich ist nichts sicher als Tod und Steuern.
Mark Amery
@ MarkAmery, "Kein PHP in der Zukunft" scheint überdurchschnittlich paranoid zu sein. Die Geschichte hat gezeigt, dass wahnsinnig beliebte Sprachen nicht so leicht absterben (Fortran!).
Pacerier
1
Sei nicht paranoid. Ausgang wird nie sterben . :)
Dolmen
6

Sie sind im Wesentlichen gleich, obwohl dieser Artikel etwas anderes vorschlägt.

OK W
quelle
1
Dieser Artikel ist einfach komisch; An der Scannerdefinition können Sie erkennen, dass sie gleichwertig sind. Wenn es einen Unterschied gibt, wurde der Test möglicherweise ohne Opcache ausgeführt.
Ja͢ck
Der Artikel handelt von einem Benchmark, der nicht reproduziert werden kann, da der Code nicht veröffentlicht wird. Ignoriere es einfach.
Dolmen
0

Funktionell sind sie identisch. Die Wahl des zu verwendenden Objekts ist also eine ganz persönliche Präferenz. Semantisch in Englisch sind sie unterschiedlich. Die klingt negativ. Wenn ich eine Funktion habe, die JSON-Daten an den Client zurückgibt und das Programm beendet, kann es schrecklich sein, wenn ich diese Funktion jsonDie () aufrufe, und es ist besser, sie jsonExit () aufzurufen. Aus diesem Grund benutze ich immer exit anstelle von die.

Luo Jiong Hui
quelle
Das OP fragt nur nach PHP-Exit- und Die-Funktionen.
Black Mamba
1
Ja, und ich habe nur diese Frage beantwortet. Zu beachten ist jedoch, dass es nicht nur um den Unterschied in der Funktionalität geht.
Luo Jiong Hui
Eine meiner schönsten Funktionen heißt pd () - was bedeutet, bitte stirb. Ich bin mir also nicht sicher, ob der Würfel in einem solchen Kontext eine schlechte Sache ist :)
Ivan Ponomarev
Als Full-Stack-Entwickler sehe ich mich nicht nur als Programmierer, sondern auch als User Experience-Designer. In diesem Zusammenhang ist Sympathie wichtig. Sympathie beeinflusst nicht nur, wie ich die Benutzeroberfläche entwerfe, sondern auch, wie ich codiere.
Luo Jiong Hui
0

Soweit ich weiß, wenn ich mir diese Frage hier anschaue

Dort heißt es: "In PHP gibt es einen deutlichen Unterschied in der Header-Ausgabe. In den folgenden Beispielen habe ich einen anderen Header verwendet, aber um den Unterschied zwischen exit () und die () zu zeigen, der keine Rolle spielt", und getestet (persönlich)

Dhiva Banyu Wigara
quelle
-3

In w3schools Quiz: Die Funktionen die () und exit () machen genau dasselbe? Meine Antwort ist falsch. Das ist eine falsche Antwort. Die richtige Antwort ist wahr.

Hier ist der Screenshot: Geben Sie hier die Bildbeschreibung ein

li bing zhao
quelle
-5

Etwas, das ich zumindest in meinen Skripten bemerkt habe, ist, dass exit () das aktuell ausgeführte Skript stoppt und die Kontrolle an jedes aufrufende Skript zurückgibt, während die PHP in seinen Spuren stoppt. Ich würde sagen, das ist ein ziemlich großer Unterschied?

Noowie
quelle
1
@AdarshMadrecha das ist nicht wahr. Wenn sie sich innerhalb oder außerhalb einer Unterfunktion befinden, stoppt das PHP-Skript immer.
MERT DOĞAN
-5

Das Ergebnis der Funktion exit () und der Funktion die () ist immer gleich. Wie auf der Alias-Handbuchseite ( http://php.net/manual/en/aliases.php ) erläutert , heißt es jedoch, dass die Funktion die () die Exit-Funktion aufruft. Ich denke, es ist hart codiert wie unten:

function die($msg){
  exit($msg);
}

Dies ist kein Leistungsproblem für kleine, mittlere und große Projekte. Wenn das Projekt Milliarden hat, multiplizieren Sie Milliarden multiplizieren Sie Milliarden Prozesse, geschieht dies in einem sehr wichtigen Zustand der Leistungsoptimierung.

Aber die meisten Leute glauben nicht, dass dies ein Problem ist, denn wenn Sie so viele Prozesse haben, müssen Sie mehr Probleme denken, als wenn eine Funktion Master oder Alias ​​ist.

Aber die genaue Antwort lautet: Die Master-Funktion ist immer schneller als der Alias.

Schließlich; Die Alias-Handbuchseite besagt, dass Sie den Würfel möglicherweise nicht mehr verwenden dürfen. Es ist nur ein Alias ​​und veraltet.

Es ist normalerweise eine schlechte Idee, diese Art von Aliasen zu verwenden, da sie möglicherweise veraltet sind oder umbenannt werden, was zu nicht portierbaren Skripten führt. Diese Liste soll denjenigen helfen, die ihre alten Skripte auf eine neuere Syntax aktualisieren möchten.

MERT DOĞAN
quelle
2
Aliasing bedeutet nicht, eine Funktion aufzurufen. Überprüfen Sie Ihre Annahmen, bevor Sie eine Hypothese ausarbeiten.
Dolmen
@dolmen Aliase ruft immer Hauptfunktionen in harten Codes auf. Dies ist eine allgemeine Programmierregel.
MERT DOĞAN
@ MERTDOĞAN Ein Alias ​​ruft nichts auf. Ein Alias ​​(in der Programmierung oder im wirklichen Leben) ist nur ein anderer Name eines Objekts (das bereits einen Namen hat). die()ist keine separate Funktion. Es ist nur ein anderer Name von exit(). Diese Antwort enthält falsche Aussagen zu Aliasen und deren Leistung.
Axiac
docs.php.net/manual/en/… Aliase ruft immer wie im obigen Beispiel auf. Lerne etwas und komm zurück.
MERT DOĞAN
-10

Sie klingen ungefähr gleich, aber mit exit () können Sie auch den Exit-Code Ihres PHP-Skripts festlegen.

Normalerweise brauchen Sie das nicht wirklich, aber wenn Sie Konsolen-PHP-Skripte schreiben, möchten Sie vielleicht mit Bash prüfen, ob das Skript alles richtig abgeschlossen hat.

Dann können Sie exit () verwenden und das später abfangen. Die () unterstützt das jedoch nicht.

Die () existiert immer mit Code 0. Ein Befehl die () führt also im Wesentlichen Folgendes aus:

<?php
echo "I am going to die";
exit(0);
?>

Welches ist das gleiche wie:

<?php
die("I am going to die");
?>
Icheb
quelle
42
Das ist nicht wahr. dieund exitsind identisch (sie erzeugen dasselbe Parser-Token ( T_EXIT) und werden von demselben Code ausgeführt). Wenn der Parameter eine Ganzzahl ist, gibt er diesen Code an die Shell zurück. Wenn dies nicht der Fall, wird es ausgegeben es und Rückgabe von 0. So dieund exitist buchstäblich Aliase für jeden-andere.
Ircmaxell
6
Nun, wenn Sie wissen, dass Sie exit verwenden können ("Ich beende ...").
Yuda Prawira
4
Bisher 23 positive Stimmen für eine Antwort, die einfach falsch ist! Aus diesem Grund stimme ich erst dann über Antworten ab, wenn ich alle konkurrierenden Antworten auf die Frage gelesen und verstanden habe (abgesehen von schrecklich geschriebenen Antworten, aus denen ich keinen Sinn machen kann).
Mark Amery
3
Genau darüber schreibt @GeoffreyHale in seiner Antwort. Was Sie als Antwort gepostet haben, ist das, was man erwarten würde, wenn man aus einer Sprache wie Perl oder C kommt. Aber wie die anderen erwähnten, gilt dies nicht für PHP. Sie könnten wirklich in Betracht ziehen, Ihre Antwort zu bearbeiten, um dies widerzuspiegeln, oder sie anderweitig zu löschen.
Levite