2011-04-28 10 views
8

he visto algo de código a hacer esto:Cuál es la diferencia entre echo ('exit'); morir; y morir ('salir');?

if(something){ 
    echo 'exit from program'; 
    die; 
} 
...more code 

y otros que sólo tiene que utilizar die:

if(something) die('exit from program'); 
...more code 

¿Hay alguna diferencia inherente a cuándo terminaría el programa, debería ser consciente de la código que viene después? etcétera

ACTUALIZACIÓN

Estoy pidiendo sobre todo, si se trata de un estilo de codificación, o si hay una verdadera razón por la cual algunos se codifica un modo u otro. No estoy preguntando cuál es la diferencia entre exit y die.

+2

Realmente no creo que esto es algo que se preocupan por – gd1

+0

considero que es un error que PHP permite que lo haga más de una forma. No te preocupes por eso – Halcyon

+0

@Frits: No es un error, es un comportamiento intencional, similar a poder usar 'print' o' echo' –

Respuesta

21

No, no hay diferencia; ambos escribirán "exit" en STDOUT y finalizarán el programa.

Preferiría el método die("exit") ya que es menos tipado, más fácil de comentar y semánticamente más claro.

En cuanto a la "velocidad", ¿por qué te importa cuál es más rápido? ¿Necesitas que tu programa muera realmente rápido?

RE: Su actualización

... ninguna diferencia inherente a cuándo terminaría el programa ...

No hay diferencia, inherente o de otra manera. Ellos son idénticos. La segunda opción, die('exit'), es una declaración única, por lo que no requiere llaves cuando se usa con una declaración if; esto no tiene nada que ver con die y todo tiene que ver con bloques y control de flujo en lenguajes estilo C.

RE: Tu comentario/segunda actualización

el camino que die es una cuestión de preferencia personal. Como dije, son idénticos. Elegiría la segunda opción por las razones enumeradas anteriormente: Más corta, más clara, más limpia, lo que equivale a "mejor" en mi opinión.

La diferencia entre exitdie y es que exit le permite devolver un estado distinto de cero, mientras que die devuelve 0. Ni función es "mejor", que sirven para diferentes propósitos.

+0

cambié mi q un poco – Neal

+18

Vivo rápido, muere joven y deja un hermoso archivo de registro. – vichle

+1

+1 me hiciste reír – Khez

1

sin diferencia.

Y por qué pedir la diferencia de velocidad desde que estás a punto de morir.

+0

bien, uno puede ser lento y doloroso, mientras que el otro es rápido y fácil, ¿qué sé? – Neal

+6

¿Has oído hablar de la eutanasia? :) – manojlds

+0

: P (13 más chatarra) – mathk

0

Hay una diferencia chicos. DIE() se puede usar con otras funciones failables, mientras que el eco debería capturarse como un error o excepción.

$query = mysql_query("SELECT * FROM tablename") OR DIE(mysql_error()); 

Le da una secuencia de captura/muerte inmediata.

+1

@meagar esto es cierto .... – Neal

+0

'$ query = mysql_query (" SELECT * FROM tablename ") O exit (mysql_error()); 'funciona igual de bien. Die() y exit() son equivalentes. – Arjan

+0

@Neal Esto no tiene nada que ver con 'die'; puede escribir ' o ' con cualquier serie de declaraciones, no es una característica del lenguaje específico de 'die'. También comentar '@ meagar' en una respuesta que aún no he comentado no funciona. – meagar

0

Para el ejemplo específico que registraron son iguales, ya que el $status es una cadena, pero como the manual dice que esto no siempre puede ser el caso:

Si el estado es una cadena, esta función impresiones de las estado justo antes de salir.

Si el estado es un número entero, ese valor se usará como estado de salida y no se imprimirá. Los estados de salida deben ser en el rango de 0 a 254, el estado de salida 255 está reservado por PHP y no debe usarse . El estado 0 se usa para finalizar el programa con éxito.

Así que si en lugar de 'exit from program' que quería de salida, dicen 42 usted realmente necesita hacer:

echo 42; die(); 
+0

no puedo hacer 'morir (42);'? que no hará nada? ¿Cuál sería el resultado? – Neal

+0

@Neal: ¡No dije que no *** no haría nada, pero ciertamente no será * echo * 'ed! Si '' die (42) 'la ejecución finaliza con el estado de salida de 42, esto es principalmente útil en entornos CLI (Command Line Interface). Solo algo que debe buscar, ya que puede dispararse en el pie si no tiene cuidado (si lo hace 'mysql_query ('...') o muere (mysql_errno())' por ejemplo). –

+0

@Alix tenía la impresión de que solo 'exit (42)' hace eso y 'die' siempre sale con' 0' – Neal

0

El lenguaje construye exit() y die() son equivalentes, al menos de acuerdo con el manual de PHP. Utilizo exit() cuando se debe llegar a esa línea y quiero que el script se detenga en ese punto. Die() por otro lado es para situaciones que no deberían ocurrir. Eso es lo que se siente más natural para mí, no tienes que estar de acuerdo.

0

Mayormente es el estilo de codificación. Sin embargo, si usted está dando salida mensajes de depuración, el eco después morir es mejor:

echo "The frobnuticator blew up!"; 
die; 

convierte

//echo "The frobnusticator blew up!"; 
die; 

Por supuesto, es muy probable que tendría

if ($debug) echo "The frobnusticator blew up!"; 
die; 

Cuál es mucho más fácil en (mi | el) ojo que

die($debug?"The frobnusticator blew up!":""); 
+0

¿eh? ¿Por qué no puedes hacer lo siguiente: 'morir (" ¡El frobnusticator estalló! "); – Neal

+0

Porque la salida de la matriz puede hacerse eco en un navegador, lo cual está bien en la depuración, pero no en la producción. Sí, lo ideal sería configurar esto en contra de esto. –

+0

En realidad, no deberías estar 'muriendo' en el código de producción. 'die' es como' assert '- para el momento en que haya probado las cosas lo suficientemente bien como para pasar el código a la producción, su código no podrá alcanzar una sentencia 'die'. – meagar

0

De Manual de PHP:

Nota: Esta construcción del lenguaje es equivalente a morir().

Pero todavía hay diferencia entre mueren y salida:

Usando die() puedes publicar una cadena: die ("Error");

mismo resultado con el uso de la salida()

<?php 
    echo("An error occurred <br>"); 
    exit(0); 
?> 

o si está cli o UNIX shell:

Uso de PHP en la línea de comandos, Die ("se produjo un error") simplemente imprime "Error" en STDOUT y finaliza el programa con un código de salida normal de 0.

<?php 
    fwrite(STDERR, "An error occurred \n"); 
    exit(0); // 
?> 
Cuestiones relacionadas