exit () simplemente rescata el programa con un estado de salida numérico, mientras que die () imprime el mensaje de error en stderr y sale con el estado EXIT_FAILURE. so exit() is exit and die() is also exit :)
Los alias permiten a los programadores utilizar el que les resulte más cómodo. Recuerdo salir mejor que morir. Algunos otros recuerdan morir mejor que salir.
Aunque hacen lo mismo, generalmente reservo diepara paradas relacionadas con errores y exitpara todos los demás escenarios. Simplemente parece fluir mejor al leer el código.
nextgentech
77
Lamento revivir esto, pero al menos para mí ... diees mucho más rápido de escribir que exit... Estoy comenzando a usarlo exitporque es más legible para los programadores que no son PHP, pero diees más rápido de escribir cuando estás en prisa. Además, por mi forma de escribir, no tengo que cambiar la posición de mis manos para escribir die.
... Como codificador de C y Perl, estaba listo para responder: "¿Por qué, exit () simplemente abandona el programa con un estado de salida numérico, mientras que die () imprime el mensaje de error en stderr y sale con el estado EXIT_FAILURE. " Pero luego recordé que estamos en la tierra de sintaxis desordenada de PHP.
En PHP, exit () y die () son idénticos.
Los diseñadores obviamente pensaron "Hmm, tomemos prestada la salida () de C. Y a la gente de Perl probablemente les gustará si tomamos die () como es de Perl también. ¡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", sino más confusas. Los codificadores C y Perl continuarán usando exit () para arrojar un valor de salida entero solamente, y die () para arrojar un mensaje de error y salir con una falla. Los novatos y la gente de PHP como primer idioma probablemente se preguntarán "umm, dos funciones de salida, ¿cuál debo usar?" El manual no explica por qué hay exit () y die ().
En general, PHP tiene mucha redundancia extraña como esta: trata de ser amigable con las personas que provienen de diferentes entornos de lenguaje, pero al hacerlo, crea redundancia confusa.
Aunque se trata de la respuesta número 100 que dice que son equivalentes (como también se ve en mi respuesta ^^), esto realmente agrega algunos puntos MUY buenos. Sobre todo, que NO son iguales en otros idiomas (de ahí la confusión en primer lugar). (+1)
Levite
@Levit, No, no, lo estás entendiendo totalmente mal . Nadie posee nombres y diferentes idiomas reutilizan los mismos nombres de manera no igual. 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 asigna dos nombres diferentes a una función ..
Pacerier
2
@Pacerier: Claro, si lo miras desde el punto de "quién tiene la culpa", eso es absolutamente correcto. Aún así, 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 cierto: hay confusión debido a los diferentes significados (incluso si es culpa de php por crear dos alias de función iguales). Definitivamente no quería señalar con el dedo a ninguno de esos idiomas, si eso fue lo que entendiste de mi comentario ... (genial xkcd por cierto (Y) ^^)
Levite
2
Esta definitivamente debería ser la respuesta elegida, ¡buena descripción!
Cody Brown el
Otro usuario respondió que exit()no cierra la conexión mientras lo die()hace, parece relevante.
ner0
62
Como se indicó anteriormente, estos dos comandos producen el mismo token 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", entonces debe haber una penalización de tiempo al buscar el nombre de la función para las funciones que comienzan con " mi". Y puede haber otras diferencias debido a cómo se verifica el nombre completo de la función.
Dudo que sea medible a menos que tenga un entorno "perfecto" dedicado a analizar PHP y muchas solicitudes con diferentes parámetros. Pero debe haber una diferencia, después de todo, PHP es un lenguaje interpretado.
@Timeless, los perfeccionistas no dirían "PHP es un lenguaje interpretado". PHP es un lenguaje que puede interpretarse o compilarse dependiendo de la configuración de su servidor.
Pacerier
29
Y ... "morir" tiene 3 caracteres de largo frente a 4 para "salir". ¡Por lo tanto, requiere un 25% menos de memoria y espacio de archivo! ;)
Jan Derk
2
'"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 al buscar el nombre de la función para las funciones que comienzan con" e "'. significa que la penalización de tiempo sucedería al buscar la función que comienza con d ? Por lo general, cuanto más grande sea la lista, más tiempo tendrá para encontrar un elemento en ella.
Pere
99
Como escribió, no ha estudiado el analizador PHP. Gracias por esta respuesta inútil ya que se basa en tus sueños sobre cómo se implementa PHP.
también es conveniente cuando alguien viene de otro idioma, si se familiarizan de alguna manera
Rohan Khude el
Tenga en cuenta que si se ejecuta de forma interactiva php ( php -a) die;, die();, exit;y exit();no tienen ningún efecto, mientras que exit(sin coma) sale del modo interactivo.
santiago arizti
31
Como todas las otras respuestas correctas dicen, diey exitson idénticas / alias.
Aunque tengo una convención personal que cuando quiero finalizar la ejecución de un script cuando se espera y se desea, lo uso exit;. Y cuando necesito finalizar la ejecución debido a algunos problemas (no pude conectarme a db, no puedo escribir en el archivo, etc.), lo 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 morir:
$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 exiten 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 solo en un proyecto. Cuando haya más personas, nadie les impedirá usar dieo exitcuando no se ajuste a mis convenciones ...
Esta página dice que diees un alias de exit, por lo que son idénticos. Pero también explica que:
hay funciones que cambiaron los nombres debido a una limpieza de la API o alguna otra razón y los nombres antiguos solo se mantienen como alias para la compatibilidad con versiones anteriores. Por lo general, es una mala idea usar este tipo de alias, ya que pueden estar vinculados a la obsolescencia o el cambio de nombre, lo que conducirá a una secuencia de comandos no compatible.
Entonces, llámame paranoico, pero puede que no haya nada dieen el futuro.
También dice que 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-srchistorial de confirmación en GitHub, la die()construcción ha estado en PHP al menos desde 1999 cuando se convirtió en un repositorio SVN, y probablemente durante el tiempo que ha existido el lenguaje. Parece absurdo imaginar que alguna vez será desaprobado.
Mark Amery
2
@ MarkAmery, aunque sus premisas no conducen a su conclusión, la conclusión en sí es válida: ~ "Llámame paranoico, pero puede que no haya exiten el futuro. O puede que no haya dieen el futuro"
Pacerier
@Pacerier Muy bien. Es posible que no haya PHP en el futuro, así que abandonemos este programa de programación y seamos emprendedores o recaudadores de impuestos. Nada es seguro, excepto la muerte y los impuestos, después de todo.
Mark Amery
@ MarkAmery, "No PHP en el futuro" parece estar paranoico por encima del promedio. La historia ha demostrado que los idiomas increíblemente populares no mueren tan fácilmente (¡Fortran!).
Pacerier
1
No seas paranoico. La salida nunca morirá . :)
dolmen
10
Este resultado de https://3v4l.org demuestra que morir y salir son funcionalmente idénticos.
Ese artículo es simplemente extraño; a partir de la definición del escáner puede decir que son equivalentes; Si hay alguna diferencia, tal vez la prueba se ejecutó sin un opcache.
Ja͢ck
El artículo trata sobre un punto de referencia que no se puede reproducir ya que el código no se publica. Simplemente ignóralo.
dolmen
0
Funcionalmente, son idénticos. Por lo tanto, elegir cuál usar es una preferencia totalmente personal. Semánticamente en inglés, son diferentes. Morir suena negativo. Cuando tengo una función que devuelve datos JSON al cliente y termina el programa, puede ser horrible si llamo a esta función jsonDie (), y es más apropiado llamarla jsonExit (). Por esa razón, siempre uso salir en lugar de morir.
El OP solo pregunta sobre las funciones de salida y troquel de PHP.
Black Mamba
1
Sí, y solo respondía esa pregunta. Sin embargo, para tener en cuenta, la pregunta no se trata solo de la diferencia en la funcionalidad.
Luo Jiong Hui
Una de las funciones más encantadoras mías se llama pd (), que significa "Por favor muere". Así que no estoy seguro de que morir sea algo malo en ese contexto :)
Ivan Ponomarev
Como desarrollador full stack, 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 cómo diseño la interfaz de usuario, sino también cómo codifico.
Dijo que "en PHP, hay una diferencia clara 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 importa", y probado (personalmente)
En w3schools Quiz: ¿las funciones die () y exit () hacen exactamente lo mismo? Mi respuesta es falsa. Esa es una respuesta incorrecta. La respuesta correcta es verdadera.
Algo que he notado en mis scripts al menos es que exit () detendrá el script que se está ejecutando actualmente y pasará el control a cualquier script de llamada, mientras que die detendrá el php en sus pistas. Yo diría que es una gran diferencia?
@AdarshMadrecha esto no es cierto. Si están dentro o fuera de una subfunción, el script php siempre se detiene.
MERT DOĞAN
-5
El resultado de la función exit () y la función die () es siempre igual. Pero como se explica en la página del manual de alias ( http://php.net/manual/en/aliases.php ), dice que la función die () llama a la función de salida. Creo que está codificado como a continuación:
functiondie($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 de procesos de multiplicación de miles de millones, esto sucede con 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 master o alias.
Pero, la respuesta exacta es esa; siempre la función maestra es más rápida que el alias.
Por lo general, es una mala idea usar este tipo de alias, ya que pueden estar vinculados a la obsolescencia o el cambio de nombre, lo que conducirá a una secuencia de comandos no compatible. Esta lista se proporciona para ayudar a aquellos que desean actualizar sus scripts antiguos a una sintaxis más nueva.
Aliasing no es 'llamar a una función'. Verifique sus suposiciones antes de elaborar hipótesis.
dolmen
@dolmen Alias siempre llama a las funciones principales en códigos duros. Esta es una regla general de programación.
MERT DOĞAN
@ 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 solo otro nombre de exit(). Esta respuesta contiene declaraciones incorrectas sobre alias y su rendimiento.
Suenan casi igual, sin embargo, la salida () también le permite configurar el código de salida de su script PHP.
Por lo general, realmente no necesita esto, pero al escribir scripts PHP de consola, es posible que desee verificar, por ejemplo, con Bash, si el script completó todo de la manera correcta.
Luego puede usar exit () y capturarlo 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:
Eso no es cierto. diey exitson idénticos (producen el mismo token 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 es así, lo generará y devolverá 0. Entonces, diey exitson literalmente alias para el otro.
ircmaxell
66
bueno, si sabes que puedes usar exit ("Estoy saliendo ...");
Yuda Prawira
44
¡23 votos positivos hasta ahora para una respuesta que es simplemente falsa! Es por eso que nunca voto sobre las respuestas hasta que he leído todas las respuestas de la pregunta y las entiendo todas (salvo las terriblemente escritas que no puedo entender).
Mark Amery
3
Esto es exactamente lo que @GeoffreyHale escribe en su respuesta. Lo informados a medida que la respuesta es lo que uno esperaría, que viene de un lenguaje como Perl o C. Pero como los otros mencionados es no cierto para php. Realmente podría considerar editar su respuesta para reflejar esto, o eliminarla de lo contrario.
so exit() is exit and die() is also exit :)
Respuestas:
No hay diferencia, son lo mismo.
Manual PHP para
exit
:Manual PHP para
die
:fuente
die
para paradas relacionadas con errores yexit
para todos los demás escenarios. Simplemente parece fluir mejor al leer el código.die
es mucho más rápido de escribir queexit
... Estoy comenzando a usarloexit
porque es más legible para los programadores que no son PHP, perodie
es más rápido de escribir cuando estás en prisa. Además, por mi forma de escribir, no tengo que cambiar la posición de mis manos para escribirdie
.DIFERENCIA EN ORIGEN
La diferencia entre
die()
yexit()
en PHP es su origen .exit()
es deexit()
en C .die()
es dedie
en Perl .FUNCIONALMENTE EQUIVALENTE
die()
yexit()
son funciones equivalentes.Manual PHP
Manual PHP para
die
:Manual PHP para
exit
:Manual PHP para la lista de alias de funciones :
DIFERENTE EN OTROS IDIOMAS
die()
yexit()
son diferentes en otros lenguajes pero en PHP son idénticos.Desde otro despotricar de PHP :
fuente
exit()
no cierra la conexión mientras lodie()
hace, parece relevante.Como se indicó anteriormente, estos dos comandos producen el mismo token 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", entonces debe haber una penalización de tiempo al buscar el nombre de la función para las funciones que comienzan con " mi". Y puede haber otras diferencias debido a cómo se verifica el nombre completo de la función.
Dudo que sea medible a menos que tenga un entorno "perfecto" dedicado a analizar PHP y muchas solicitudes con diferentes parámetros. Pero debe haber una diferencia, después de todo, PHP es un lenguaje interpretado.
fuente
Manual PHP en troquel :
Incluso puede hacer
die;
lo mismo queexit;
con o sin parens.La única ventaja de elegir
die()
másexit()
, podría ser el momento de repuesto en la que escribir una carta adicional ;-)fuente
php -a
)die;
,die();
,exit;
yexit();
no tienen ningún efecto, mientras queexit
(sin coma) sale del modo interactivo.Como todas las otras respuestas correctas dicen,
die
yexit
son idénticas / alias.Aunque tengo una convención personal que cuando quiero finalizar la ejecución de un script cuando se espera y se desea, lo uso
exit;
. Y cuando necesito finalizar la ejecución debido a algunos problemas (no pude conectarme a db, no puedo escribir en el archivo, etc.), lo usodie("Something went wrong.");
para "matar" el script.Cuando uso exit:
Cuando uso morir:
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 veodie
, 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 solo en un proyecto. Cuando haya más personas, nadie les impedirá usar
die
oexit
cuando no se ajuste a mis convenciones ...fuente
Aquí hay algo que es bastante interesante. Aunque
exit()
ydie()
son equivalentes,die()
cierra la conexión.exit()
no cierra la conexióndie()
:exit()
:Resultados:
exit()
:die()
:Solo por si necesita tener esto en cuenta para su proyecto.
Créditos: https://stackoverflow.com/a/20932511/4357238
fuente
exit
ydie
funcionan de la misma manera, ambos cierran la conexión.Funcionalmente, son idénticos, pero los uso en los siguientes escenarios para que el código sea legible:
Use die () cuando haya un error y deba detener la ejecución.
p.ej
die( 'Oops! Something went wrong' );
Use exit () cuando no haya un error y deba detener la ejecución.
p.ej
exit( 'Request has been processed successfully!' );
fuente
Esta página dice que
die
es un alias deexit
, por lo que son idénticos. Pero también explica que:Entonces, llámame paranoico, pero puede que no haya nada
die
en el futuro.fuente
is_int()
yis_integer()
son igualmente buenos, por ejemplo. Mirando elphp-src
historial de confirmación en GitHub, ladie()
construcción ha estado en PHP al menos desde 1999 cuando se convirtió en un repositorio SVN, y probablemente durante el tiempo que ha existido el lenguaje. Parece absurdo imaginar que alguna vez será desaprobado.exit
en el futuro. O puede que no hayadie
en el futuro"Este resultado de https://3v4l.org demuestra que morir y salir son funcionalmente idénticos.
fuente
Son esencialmente lo mismo, aunque este artículo sugiere lo contrario.
fuente
Funcionalmente, son idénticos. Por lo tanto, elegir cuál usar es una preferencia totalmente personal. Semánticamente en inglés, son diferentes. Morir suena negativo. Cuando tengo una función que devuelve datos JSON al cliente y termina el programa, puede ser horrible si llamo a esta función jsonDie (), y es más apropiado llamarla jsonExit (). Por esa razón, siempre uso salir en lugar de morir.
fuente
Por lo que sé cuando miro esta pregunta aquí
Dijo que "en PHP, hay una diferencia clara 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 importa", y probado (personalmente)
fuente
En w3schools Quiz: ¿las funciones die () y exit () hacen exactamente lo mismo? Mi respuesta es falsa. Esa es una respuesta incorrecta. La respuesta correcta es verdadera.
Aquí está la captura de pantalla:
fuente
Algo que he notado en mis scripts al menos es que exit () detendrá el script que se está ejecutando actualmente y pasará el control a cualquier script de llamada, mientras que die detendrá el php en sus pistas. Yo diría que es una gran diferencia?
fuente
El resultado de la función exit () y la función die () es siempre igual. Pero como se explica en la página del manual de alias ( http://php.net/manual/en/aliases.php ), dice que la función die () llama a la función de salida. Creo que está codificado como a continuación:
Este no es un problema de rendimiento para proyectos pequeños, medianos y grandes, pero si el proyecto tiene miles de millones de procesos de multiplicación de miles de millones, esto sucede con 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 master o alias.
Pero, la respuesta exacta es esa; siempre la función maestra es más rápida que el alias.
Finalmente; La página del manual de alias dice que ya no puede usar el dado. Es solo un alias y está en desuso.
fuente
die()
No es una función separada. Es solo otro nombre deexit()
. Esta respuesta contiene declaraciones incorrectas sobre alias y su rendimiento.Suenan casi igual, sin embargo, la salida () también le permite configurar el código de salida de su script PHP.
Por lo general, realmente no necesita esto, pero al escribir scripts PHP de consola, es posible que desee verificar, por ejemplo, con Bash, si el script completó todo de la manera correcta.
Luego puede usar exit () y capturarlo 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:
Que es lo mismo que:
fuente
die
yexit
son idénticos (producen el mismo token 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 es así, lo generará y devolverá 0. Entonces,die
yexit
son literalmente alias para el otro.