Creo que todos estos (e incluso die()
o die(0)
) son idénticos. Si no son idénticos, ¿cuál se prefiere para salir de un script con éxito? Si son idénticos, ¿existe algún estándar preferido para indicar la finalización exitosa del guión? Tiendo a usar exit;
.
EDITAR: Todas las respuestas tienen " die()
y exit()
son idénticas" a pesar de que digo eso en mi pregunta. Actualicé el título para que quede más claro que esta NO es mi pregunta. Quiero indicar claramente el éxito desde un script de línea de comandos.
return
tiene una implicación diferenteRespuestas:
Todos son idénticos. Estoy bastante seguro de que
die()
es solo un alias directo deexit()
, pero incluso si no lo es, sigue actuando de manera idéntica.Cuando una de estas funciones recibe un argumento de cadena, imprime la cadena antes de terminar el proceso. Cuando encuentra un número entero por debajo de 255, ese número entero se considera el código de retorno del proceso, que se devuelve al proceso que invocó el script PHP. Esto es particularmente útil al escribir aplicaciones de línea de comandos (¡PHP no es solo web!).
En cuanto a la diferencia entre
exit
,exit()
yexit(0)
, realmente hay ninguno. Definitivamente no hay diferencia entre los dos primeros porqueexit
técnicamente es una construcción del lenguaje, no una función, por lo que se puede llamar con o sin paréntesis, al igual queecho
. Devolver un código de0
significa "este programa se ejecutó correctamente / sin errores", y aunque no sé qué sucede exactamente cuando no pasas un argumento, PHP.net dice que un argumento sin argumentosexit
indica éxito, así que apostaría regresa0
, aunque nuevamente PHP.net no muestra un valor predeterminado para el argumento.fuente
exit(0)
significa salir con éxito,exit(1)
significa salir con error.exit
(odie
) con un parámetro de cadena. Habiendo visto, por ejemplo, eldie(-1)
modismo común , y tambiéndie("Poo!...")
llamadas muchas, puede que uno no esté tan seguro después de todo, y de todos modos: adivinar debería pertenecer a otras profesiones ... Entonces, FTR: es 0. Lo que también significa que este último,die("error!")
sería más probablemente sea un error en los scripts de CLI, en realidad. : -oComo han mencionado varias personas, die () y exit () son exactamente lo mismo.
Si observa la documentación de PHP , hay dos opciones para los argumentos:
Un valor numérico. Esto solo es útil si está utilizando PHP desde la línea de comandos, en lugar de un servidor web. Un valor de cero indica éxito. Distinto de cero indica que ocurrió una condición de falla.
Un valor de cadena. Esto se mostrará en el navegador cuando se produzca la salida.
En lugar de morir () o salir (), recomiendo usar excepciones y un controlador de excepciones de nivel superior personalizado para administrar las condiciones de falla.
De esa manera, tiene más flexibilidad para hacer cosas como el registro automático de errores. Además, si está utilizando PHP para implementar una API JSON, este controlador de excepciones puede devolver un fragmento JSON válido que indique errores.
fuente
Yo diría que en lo que respecta a una mejor semántica se
die($arg);
debe usar para una terminación anormal o inesperada, incluso cuando -por supuesto- todavía la hayas pillado. Yexit($arg);
debe usarse para un final normal (esperado / controlado) de un proceso, comobreak;
para unafor
owhile
o unaswitch
estructura pero con un final definitivo.Sin embargo ... personalmente, a menudo uso una
if { } else { }
estructura general para controlar diferentes ramas de procesos enormes o el almacenamiento en búfer de salida para no tener que usar "salir" ...También lo uso
die($arg)
en semánticas simples de detección de errores como en$db = mysql_connect([$args]) or die ($error);
...fuente
die();
es solo un sinónimoexit();
y es funcionalmente idéntico.La forma estándar es utilizar el código de salida cero para indicar el éxito y cualquier otra cosa para indicar una condición de error.
fuente
die () se usa normalmente para matar el script con una salida de error:
die("There was a fatal error");
where-as exit se usa normalmente como una salida exitosa (al menos en mi codificación)
El Manual de PHP dice que las funciones son idénticas.
fuente
Voy a ser votado al infierno , pero en algunos casos al piratear en CLI, no queremos que el programa sea eliminado, mientras que no queremos continuar con la ejecución completa.
Aquí el objetivo es evitar hacer llamadas a la API a un archivo de punto de mano separado. Digamos que tengo un buen botón de reproducción en mi interfaz, que ejecuta llamadas al sistema.
Ejemplo 1: El programa se mata después del trabajo, no se devuelven datos. Esto no se quiere.
if ($_GET["play"] != ""){ // Some job exit; } /* Huge amount of data*/
Ejemplo 2: el programa aún se ejecuta , alimentando todos los datos en la solicitud GET. Esto es innecesario en este caso. Esto está ralentizando el navegador con todos los datos que ya tiene.
if ($_GET["play"] != ""){ // Some job } /* Huge amount of data*/
Ejemplo 3: El programa aún se ejecuta , no se devolvieron datos como se esperaba, el comando play se ejecutó, pero se analizó todo el conjunto de datos, este es un trabajo innecesario, puede ralentizar php / la máquina.
/* Huge amount of data*/ if ($_GET["play"] != ""){ // Some job }
Ejemplo 4: El programa aún se ejecuta , no se devolvieron datos como se esperaba, se ejecutó el comando de reproducción, no se analizaron todos los datos, php devolvió superrápidamente 200OK con una respuesta vacía, como se esperaba. ¡Todo el mundo feliz!
if ($_GET["play"] != ""){ // Some job goto END; } /* Huge amount of data*/ END;
¡Si! ¡Usar GOTO, a veces se debe considerar -como lo mejor que se puede hacer 🔨 -!
https://www.php.net/manual/en/control-structures.goto.php
fuente
die
es exactamente equivalente aexit
.Del manual :
Esto solo es útil si tiene algún tipo de contenedor que hace algo en función del estado de salida. A menos que tenga una necesidad específica de informar un código de salida al mundo exterior, simplemente
exit;
.fuente