18 Pregunta: ¿Cuáles son las diferencias entre die () y exit () en PHP?

pregunta creada en Sat, Jan 12, 2019 12:00 AM

¿Cuáles son las diferencias entre las funciones die() y exit() en PHP?

Creo que ambos tienen la misma funcionalidad, pero dudo que haya algo diferente en ambos ... ¿qué es?

    
627
  1. exit () simplemente cierra el programa con un estado de salida numérico, mientras que die () imprime el mensaje de error a stderr y sale con el estado EXIT_FAILURE. so exit() is exit and die() is also exit :)
    2016-04-06 09: 37: 41Z
18 Respuestas                              18                         

No hay diferencia, son lo mismo.

Manual de PHP para exit :

  

Nota: esta construcción de lenguaje es equivalente a die() .

Manual de PHP para die :

  

Esta construcción de lenguaje es equivalente a exit() .

    
511
2009-11-25 06: 30: 16Z
  1. Los alias
    permiten a los programadores usar uno con el que se sienta cómodo. Recuerdo salir mejor que morir. Algunos otros recuerdan morir mejor que salir
    2009-11-25 06: 35: 56Z
  2. this ( php.net/manual /en/aliases.php ) podría dar una explicación de por qué 2 funciones hacen lo mismo
    2009-11-25 07: 17: 34Z
  3. A pesar de que hacen lo mismo, generalmente reservo die para paradas relacionadas con errores y exit para todos los demás escenarios. Parece que fluye mejor cuando se lee el código.
    2014-01-11 04: 29: 44Z
  4. Siento revivir esto, pero al menos para mí ... die es mucho más rápido de escribir que exit ... Estoy empezando a usar exit porque es más legible para los programadores que no son PHP, pero die es más rápido de escribir cuando tienes prisa. Además, por la forma en que escribo, no tengo que cambiar la posición de mis manos para escribir die.
    2015-02-27 14: 17: 39Z
  5. 2015-06-30 05: 46: 07Z

DIFERENCIA EN ORIGEN

La diferencia entre die() y exit() en PHP es su origen .


FUNCIONALMENTE EQUIVALENTE

die() y exit() son funciones equivalentes.

Manual de PHP

Manual de PHP para die :

  

este idioma construct es equivalente a exit() .

Manual de PHP para exit :

  

Nota: esta construcción de lenguaje es equivalente a die() .

Manual de PHP para Lista de alias de funciones :

  

die es un alias para la función maestra exit()


DIFERENTE EN OTROS IDIOMAS

die() y exit() son diferentes en otros idiomas pero en PHP son idénticos.

De Otro rant de PHP :

  

... Como codificador de C y Perl, estaba listo para responder: "Por qué, exit () simplemente cuelga   fuera del programa con un estado de salida numérico, mientras que die () imprime el   mensaje de error a stderr y sale con el estado EXIT_FAILURE. "Pero entonces   Recordé que estamos en la sintaxis desordenada de PHP.

     

En PHP, exit () y die () son idénticos.

     

Los diseñadores obviamente pensaron "Hmm, tomemos prestados exit () de C . Y Perl   es probable que a la gente le guste si tomamos die () como lo es también de Perl .   ¡Uy! Tenemos dos funciones de salida ahora! Hagámoslo para que ambos   puede tomar una cadena o un entero como argumento y hacerlos idénticos! "

     

El resultado final es que esto realmente no hizo las cosas más "fáciles",   Sólo más confuso. Los codificadores C y Perl continuarán utilizando exit () para   arroje solo un valor de salida entero, y die () para lanzar un mensaje de error   y salir con un fallo. Los novatos y las personas de PHP como primer idioma   probablemente me pregunte "umm, dos funciones de salida, ¿cuál debería ser?   ¿uso? "El manual no explica por qué hay exit () y die ().

     

En general, PHP tiene una gran cantidad de redundancia extraña como esta: intenta   ser amigable con personas que provienen de diferentes idiomas,   pero al hacerlo, crea una redundancia confusa.

    
200
2015-04-30 23: 56: 14Z
  1. A pesar de que se trata de la respuesta número 100 que indica que son equivalentes (como también se ve en mi respuesta ^^), esto realmente agrega algunos puntos MUY buenos. Más que nada, no son los mismos en otros idiomas (por lo tanto, la confusión en primer lugar). (+1)
    2015-04-07 06: 36: 07Z
  2. @ Levit, No, no, lo entiendes totalmente incorrecto . Nadie es dueño de nombres y diferentes idiomas reutilizan los mismos nombres de ninguna manera. Eso está bien porque no necesitamos otra forma estándar de hacer las cosas. La "confusión en primer lugar" se debe a que PHP asignó dos nombres diferentes a una función ..
    2015-06-30 12: 03: 54Z
  3. @ Pacerier: Claro, si lo miras desde el punto de "quién tiene la culpa es eso", eso es absolutamente correcto. Sin embargo, también es un hecho que simplemente significan cosas diferentes en varios idiomas (lo cual está bien). Mirándolo desde una perspectiva neutral, definitivamente es verdad: hay confusión debido a los diferentes significados (incluso si es culpa de php crear dos alias de funciones iguales). Definitivamente no quería señalar con el dedo ninguno de esos idiomas, si eso es lo que entendiste de mi comentario ... (gran xkcd por cierto (Y) ^^)
    2015-07-01 06: 24: 41Z
  4. ¡Esta debería ser definitivamente la respuesta elegida, buena descripción!
    2019-04-24 18: 48: 13Z

Como se indicó anteriormente, estos dos comandos producen el mismo token de analizador.

PERO

Hay una pequeña diferencia, y ese es el tiempo que tarda el analizador en devolver el token.

No he estudiado el analizador PHP, pero si es una larga lista de funciones que comienzan con "d" y una lista más corta que comienza con "e", debe haber una penalización de tiempo buscando el nombre de la función para las funciones comenzando con "e". Y puede haber otras diferencias debido a cómo se verifica todo el nombre de la función.

Dudo que sea medible a menos que tengas un entorno "perfecto" dedicado al análisis de PHP, y muchas solicitudes con diferentes parámetros. Pero debe haber una diferencia, después de todo, PHP es un lenguaje interpretado.

    
55
2018-11-12 14: 58: 27Z
  1. @ Timeless, los perfeccionistas no dirían "PHP es un lenguaje interpretado". PHP es un lenguaje que puede ser interpretado o compilado dependiendo de la configuración de su servidor.
    2015-06-30 05: 38: 03Z
  2. Y ... "die" tiene una longitud de 3 caracteres y 4 para "exit". ¡Entonces se necesita un 25% menos de memoria y espacio de archivos! ;)
    2015-11-24 21: 04: 11Z
  3. '"si es una larga lista de funciones que comienzan con" d ", y una lista más corta que comienza con" e ", entonces debe haber una penalización de tiempo buscando el nombre de la función para las funciones que comienzan con "e". ¿No querría decir que la penalización de tiempo se produciría al buscar la función que comienza con d ? Por lo general, cuanto mayor sea la lista, mayor será el tiempo para encuentra un artículo en él.
    2015-12-17 18: 43: 57Z
  4. Mientras escribías, no has estudiado el analizador de PHP. Gracias por esta respuesta inútil, ya que se basa en sus sueños sobre cómo se implementa PHP.
    2018-01-24 13: 09: 00Z

Manual de PHP en die :

  

die - Equivalente para salir

Incluso puedes hacer die; de la misma manera que exit;, con o sin parens.

La única ventaja de elegir die() sobre exit(), puede ser el tiempo que le queda al escribir una letra adicional ;-)

    
40
2017-10-20 16: 29: 24Z
  1. también es conveniente cuando alguien viene de otro idioma, si se familiariza de alguna manera con cualquiera de las dos formas
    2017-11-30 08: 12: 48Z

Como dicen todas las demás respuestas correctas, die y exit son idénticos /alias.

Aunque tengo una convención personal de que cuando deseo finalizar la ejecución de un script cuando se espera y desea, utilizo exit;. Y cuando necesito finalizar la ejecución debido a algunos problemas (no se pudo conectar a db, no se puede escribir en el archivo, etc.), uso die("Something went wrong."); para "matar" el script.

Cuando uso exit:

 
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.

Cuando uso die:

 
$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 );

De esta manera, cuando veo exit en algún punto de mi código, sé que en este punto quiero salir porque la lógica termina aquí. Cuando veo die, sé que me gustaría continuar con la ejecución, pero no puedo o no debo debido a un error en la ejecución anterior.

Por supuesto, esto solo funciona cuando se trabaja en un proyecto solo. Cuando haya más personas, nadie les impedirá usar die o exit donde no se ajuste a mis convenciones ...

    
27
2015-07-15 14: 00: 10Z

Esta página dice que die es un alies de exit, por lo que son idénticos. Pero también explica que:

  

hay funciones que cambiaron los nombres debido a una limpieza de API o alguna otra razón y los nombres antiguos solo se guardan como alias para la compatibilidad con versiones anteriores. Por lo general, es una mala idea usar este tipo de alias, ya que pueden estar sujetos a obsolescencia o cambio de nombre, lo que llevará a una secuencia de comandos no portátil.

Entonces, llámame paranoico, pero puede que no haya die en el futuro.

    
11
2014-04-22 04: 20: 34Z
  1. También dice En algunos casos, no hay un nombre preferido entre los múltiples, is_int() y is_integer() son igualmente buenos, por ejemplo. Mirando el php-src historial de confirmaciones en GitHub, el constructo die() ha estado en PHP al menos desde 1999, cuando se convirtió en un repositorio SVN, y probablemente durante el tiempo que haya existido el idioma. Parece absurdo imaginar que alguna vez quedará obsoleto.
    2014-11-30 21: 53: 37Z
  2. @ MarkAmery, si bien sus premisas no llevan a su conclusión, la conclusión en sí es válida: ~ "Llámame paranoico, pero puede que no haya exit en el futuro. O puede que no haya die en el futuro "
    2015-06-30 11: 56: 59Z
  3. @ Pacerier Muy a la derecha. Es posible que no haya PHP en el futuro, así que abandonemos este trabajo de programación y nos convertimos en emprendedores o recaudadores de impuestos. Nada es seguro, excepto la muerte y los impuestos, después de todo.
    2015-06-30 12: 00: 49Z
  4. @ MarkAmery, "No hay PHP en el futuro" parece estar por encima del promedio paranoico. La historia ha demostrado que los idiomas increíblemente populares no se desvanecen tan fácilmente (¡Fortran!).
    2015-07-02 08: 01: 19Z
  5. No seas paranoico. exit nunca morirá . :)
    2018-01-24 13: 24: 09Z

Esta salida de https://3v4l.org demuestra que morir y salir son funcionalmente idénticos. ingrese la descripción de la imagen aquí

    
7
2017-06-12 08: 58: 25Z

Aquí hay algo que es bastante interesante. Aunque exit() y die() son equivalentes, die() cierra la conexión. exit() no cierra la conexión.

die():

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

exit():

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

Resultados:

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

En caso necesario, debe tener esto en cuenta para su proyecto.

Créditos: https://stackoverflow.com/a/20932511/4357238

    
7
2019-06-09 06: 09: 16Z
  1. La URL de origen tiene una conclusión opuesta: die () cierra la conexión y exit () no.
    2018-10-13 04: 23: 12Z

Son esencialmente los mismos, aunque este artículo sugiere lo contrario.

    
6
2009-11-25 06: 32: 52Z
  1. Ese artículo es simplemente extraño; desde escáner definición puede decir que son equivalentes; si hay alguna diferencia, tal vez la prueba se ejecutó sin un caché de datos.
    2014-11-25 05: 03: 39Z
  2. El artículo trata sobre un punto de referencia que no se puede reproducir porque el código no se publica. Solo ignóralo.
    2018-01-24 13: 14: 03Z

En cuanto a la funcionalidad, son idénticos, pero los uso en los siguientes escenarios para hacer que el código sea legible:

Use "die" cuando haya un error y tenga que detener la ejecución.

por ejemplo  die( 'Oops! Something went wrong' );

Use "salir" cuando no haya un error y tenga que detener la ejecución.

por ejemplo  exit( 'Request has been processed successfully!' );

    
5
2018-10-26 06: 29: 39Z

Al usar la línea de comando,

 
 die("Error");

Se imprimirá en "Error" para STDOUT y se cerrará con el código de error 0.

si desea salir con el código de error 1, debe:

 
  fwrite(STDERR, "Error");
    exit(1);

Podría ser útil al ejecutar scripts php desde la línea de comandos o scripts de shell y desea ver si el script terminó con un código de salida distinto de cero. copia copiada de charanjeet de Quora

    
0
2017-07-03 07: 39: 54Z
  1. Copiar una respuesta incorrecta de otra fuente no es útil.
    2018-01-24 13: 23: 04Z

Por lo que sé cuando veo esta pregunta aquí

Dijo que "en PHP, hay una clara diferencia en la salida del encabezado. En los ejemplos a continuación, elegí usar un encabezado diferente pero para mostrar la diferencia entre exit () y die () que no lo hace importa ", y probado (personalmente)

    
0
2018-07-31 04: 54: 58Z

die () y exit () ambas funciones son equivalentes entre sí. La principal diferencia es que exit () detendrá el script pero imprimirá la salida. Pero die () detiene directamente la ejecución del script.

    
0
2019-03-05 12: 19: 08Z

Funcionalmente, son idénticos. Así que elegir cuál usar es totalmente una preferencia personal. Semánticamente en inglés, son diferentes. La muerte suena negativa. Cuando tengo una función que devuelve datos JSON al cliente y finalizo el programa, puede ser horrible si llamo a esta función jsonDie (), y es más apropiado llamarlo jsonExit (). Por esa razón, siempre uso exit en lugar de die.

    
- 1
2017-03-01 19: 48: 20Z
  1. El OP está preguntando acerca de las funciones de salida y dado de PHP solamente.
    2017-03-02 07: 10: 11Z
  2. Sí, y solo estaba respondiendo esa pregunta. Sin embargo, para estar al tanto, la pregunta no es sobre la diferencia en la funcionalidad solamente.
    2017-03-02 11: 16: 07Z
  3. Una de las funciones más encantadoras de mis funciones se llama pd (), que significa "Por favor, muere". Así que no estoy seguro de que morir sea algo malo en ese contexto :)
    2018-01-06 10: 35: 29Z
  4. Como desarrollador de pila completa, no solo me veo a mí mismo como programador, sino también como diseñador de experiencia de usuario. Y en este contexto, la simpatía es importante. La simpatía no solo afecta la forma en que diseño la interfaz de usuario, sino también la forma en que codifico.
    2018-01-08 14: 54: 12Z

En w3schools Quiz: ¿Las funciones die () y exit () hacen exactamente lo mismo? mi respuesta es falsa Esa es la respuesta incorrecta. La respuesta correcta es verdadera.

Aquí está la captura de pantalla: ingrese la descripción de la imagen aquí

    
- 3
2017-04-04 19: 40: 03Z

Al menos, algo que he notado en mis scripts es que exit () detendrá el script que se está ejecutando y pasará el control a cualquier script de llamada, mientras que die detendrá a php en sus pistas. Yo diría que es una gran diferencia?

    
- 4
2017-07-27 13: 48: 13Z
  1. @ AdarshMadrecha esto no es cierto. Si están dentro o fuera de una subfunción, el script php siempre se detiene.
    2018-02-17 06: 22: 42Z

El resultado de la función exit () y la función die () son siempre los mismos. Pero como se explica en la página de manual de alias ( http://php.net/manual/en/aliases. php ), dice que la función die () llama a exit function. Creo que está codificado como el siguiente:

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

Este no es un problema de rendimiento para proyectos pequeños, medianos y grandes, pero si el proyecto tiene miles de millones multiplicando miles de millones de procesos de miles de millones, esto ocurre en un estado de optimización de rendimiento muy importante.

Pero la mayoría de la gente no cree que esto sea un problema, porque si tiene tantos procesos, debe pensar en más problemas que si una función es maestra o alias.

Pero, la respuesta exacta es que; la función maestra siempre es más rápida que el alias.

Finalmente; página de manual de alias dice que ya no puedes usar die. Es solo un alias, y está en desuso.

  

Por lo general, es una mala idea usar este tipo de alias, ya que pueden ser   sujeto a obsolescencia o cambio de nombre, lo que dará lugar a   guión. Esta lista se proporciona para ayudar a aquellos que desean actualizar su   scripts antiguos a una sintaxis más reciente.

    
- 4
2018-01-17 15: 56: 00Z
  1. El aliasing no es 'llamar a una función'. Verifique sus suposiciones antes de elaborar hipótesis.
    2018-01-24 13: 18: 25Z
  2. @ dolmen Alias ​​siempre calles funciones principales en códigos duros. Esta es una regla de programación general.
    2018-01-24 22: 43: 33Z
  3. @ MERTDOĞAN Un alias no llama a nada. Un alias (en programación o en la vida real) es solo otro nombre de un objeto (que ya tiene un nombre). die() no es una función separada. Es sólo otro nombre de exit(). Esta respuesta contiene estadísticas incorrectas.Reflexiones sobre los alias y su rendimiento.
    2018-03-15 07: 26: 58Z
  4. docs.php.net/manual/en/… Alias ​​siempre calles como el ejemplo anterior. Aprende algo y vuelve.
    2018-03-16 12: 04: 23Z

Suenan casi igual, sin embargo, exit () también te permite configurar el código de salida de tu script PHP.

Por lo general, realmente no necesitas esto, pero al escribir scripts de PHP de consola, es posible que desees verificar, por ejemplo, Bash si el script completó todo de la manera correcta.

Luego puedes usar exit () y capturar eso más adelante. Die () sin embargo, no es compatible con eso.

Die () siempre existe con el código 0. Entonces, esencialmente un comando die () hace lo siguiente:

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

Que es lo mismo que:

 
<?php
die("I am going to die");
?>
    
- 8
2009-11-25 08: 19: 20Z
  1. Eso no es cierto. die y exit son idénticos (producen el mismo token de analizador (T_EXIT) y se ejecutan con el mismo código). Si el parámetro es un entero, devolverá ese código al shell. Si no lo es, lo generará y devolverá 0. Así que die y exit son literalmente alias el uno para el otro.
    2011-04-29 13: 25: 01Z
  2. bien si sabes que puedes usar exit ("I'm exit ...");
    2013-04-11 08: 33: 16Z
  3. 23 upvotes hasta ahora para una respuesta que es simplemente falsa! Esta es la razón por la que nunca voto en las respuestas hasta que haya leído todas las respuestas de la pregunta que compiten entre sí y las entienda todas (a excepción de las escritas terriblemente que no puedo entender).
    2014-12-01 11: 31: 53Z
  4. Por favor, elimine la respuesta, está mal.
    2015-01-11 12: 56: 14Z
  5. Esto es exactamente lo que escribe @GeoffreyHale en su respuesta. Lo que publicaste como respuesta es lo que uno esperaría, proveniente de un lenguaje como Perl o C. Pero como mencionan los demás, no es no verdadero para PHP. Es posible que realmente considere editar su respuesta para reflejar esto, o eliminarla de otra manera.
    2015-04-07 06: 43: 47Z
fuente colocada aquí