como - ¿Cuáles son las diferencias entre die() y exit() en PHP?
exit php (17)
DIFERENCIA EN ORIGEN
La diferencia entre die()
y exit()
en PHP es su origen .
-
exit()
es de laexit()
en C. -
die()
es dedie
en Perl .
FUNCIONALMENTE EQUIVALENTE
die()
y exit()
son funciones equivalentes.
Manual de PHP
Manual de PHP para die() :
Esta construcción de lenguaje es equivalente a
exit()
.
Manual de PHP para exit() :
Nota: esta construcción de lenguaje es equivalente a
die()
.
Manual de PHP para la php.net/manual/en/aliases.php :
DIFERENTE EN OTROS IDIOMAS
die()
y exit()
son diferentes en otros idiomas pero en PHP son idénticos.
De beastwithin.org/users/wwwwolf/code/phprant.html :
... Como codificador de C y Perl, estaba listo para responder: "Por qué, 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. " Pero luego recordé que estamos en la sintaxis desordenada de PHP.
En PHP, exit () y die () son idénticos.
Los diseñadores obviamente pensaron "Hmm, tomemos prestada exit () de C. Y a la gente de Perl probablemente le gustará si tomamos die () como también lo es de Perl . ¡Vaya! Tenemos dos funciones de salida ahora. Hagamos 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", solo que más confusas. Los codificadores C y Perl continuarán usando exit () para lanzar solo un valor de salida entero, y die () para lanzar un mensaje de error y salir con una falla. Los novatos y las personas de PHP como primer idioma probablemente se preguntarán "umm, dos funciones de salida, ¿cuál debería usar?" El manual no explica por qué hay exit () y die ().
En general, PHP tiene una gran cantidad de redundancias extrañas como esta: trata de ser amigable con las personas que provienen de diferentes idiomas, pero al hacerlo, crea una redundancia confusa.
¿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?
Algo que he notado en mis scripts al menos 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?
Aquí hay algo que es bastante interesante. Aunque exit()
y die()
son equivalentes, exit()
cierra la conexión. die()
no cierra la conexión.
exit()
:
<?php
header(''HTTP/1.1 304 Not Modified'');
exit();
?>
die()
:
<?php
header(''HTTP/1.1 304 Not Modified'');
die();
?>
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
Solo en caso de necesitar tomar esto en cuenta para su proyecto.
Créditos: https://.com/a/20932511/4357238
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 de PHP, pero si se trata de 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 que comienzan con " mi". 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 tenga 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.
Como todas las otras respuestas correctas dicen, die
y exit
son idénticos / alias.
Aunque tengo una convención personal de que cuando quiero 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 guión.
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 evitará que usen die
o exit
donde no se ajuste a mis convenciones ...
Cuando se utiliza la línea de comandos,
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. Copiado respuesta de charanjeet de quora.
De lo que sé cuando veo esta pregunta here
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 () eso no importa", y probado (personalmente)
El resultado de la función exit () y la función die () son siempre iguales. Pero como se explica en la página de manual de alias ( php.net/manual/en/aliases.php ), dice que la función die () llama a la función exit. 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 billones, esto ocurre en un estado muy importante de optimización del rendimiento.
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 esa; La función maestra siempre es más rápida que el alias.
Finalmente; php.net/manual/en/aliases.php dice eso, 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 estar sujetos a obsolescencia o cambio de nombre, lo que llevará a una secuencia de comandos no portátil. Esta lista se proporciona para ayudar a aquellos que desean actualizar sus scripts antiguos a una sintaxis más nueva.
En cuanto a la funcionalidad, son idénticos, pero los uso en los siguientes escenarios para hacer que el código sea legible:
Use "morir" 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!'' );
Esta salida de https://3v4l.org demuestra que die y exit son funcionalmente idénticos.
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 salir en lugar de morir.
Manual de PHP en el die() :
morir - Equivalente a salir
Incluso puedes hacer die;
de la misma manera que la 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 ;-)
Son esencialmente los mismos, aunque este article sugiere lo contrario.
Suenan casi igual, sin embargo, exit () también le permite establecer el código de salida de su script PHP.
Por lo general, realmente no necesita esto, pero al escribir scripts de la consola en PHP, es posible que desee verificar, por ejemplo, Bash si el script completó todo de la manera correcta.
Luego puedes usar exit () y atrapar eso más adelante. Die () sin embargo, no soporta 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");
?>
php.net/manual/en/aliases.php dice que die
es una 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 algún otro motivo 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.