exit () apenas interrompe o programa com um status de saída numérico, enquanto die () imprime a mensagem de erro em stderr e sai com o status EXIT_FAILURE. so exit() is exit and die() is also exit :)
aliases permite que os programadores usem o que é mais confortável. Lembro-me de sair melhor do que morrer. Alguns outros se lembram de morrer melhor que sair.
Mesmo que eles façam o mesmo, costumo reservar diepara paradas relacionadas a erros e exitpara todos os outros cenários. Parece apenas fluir melhor ao ler o código.
nextgentech
7
Desculpe reviver isso, mas pelo menos para mim ... dieé muito mais rápido escrever do que exit... Estou começando a usar exitporque é mais legível para programadores que não são PHP, mas dieé mais rápido para digitar quando você está em pressa. Além disso, pela maneira como digito, não preciso alterar a posição das minhas mãos para escrever die.
... Como codificador C e Perl, eu estava pronto para responder: "Ora, exit () apenas interrompe o programa com um status de saída numérico, enquanto die () imprime a mensagem de erro em stderr e sai com o status EXIT_FAILURE. " Mas então me lembrei de que estamos na área de sintaxe confusa do PHP.
No PHP, exit () e die () são idênticos.
Os designers obviamente pensaram "Hmm, vamos pegar emprestado exit () do C. E o pessoal do Perl provavelmente vai gostar se pegarmos die () como é do Perl também. Opa! Temos duas funções de saída agora! Vamos fazer com que ambos pode pegar uma string ou um número inteiro como argumento e torná-los idênticos! "
O resultado final é que isso realmente não tornou as coisas "mais fáceis", apenas mais confusas. Os codificadores C e Perl continuarão usando exit () para lançar apenas um valor inteiro de saída e die () para lançar uma mensagem de erro e sair com falha. Iniciantes e pessoas com PHP como primeira língua provavelmente se perguntarão "umm, duas funções de saída, qual devo usar?" O manual não explica por que existe exit () e die ().
Em geral, o PHP tem uma redundância estranha como essa - tenta ser amigável para pessoas que têm diferentes origens de linguagem, mas, ao fazê-lo, cria redundância confusa.
Embora essa seja a centésima resposta, afirmando que eles são equivalentes (como também visto na minha resposta ^^), isso realmente adiciona alguns pontos MUITO bons. Acima de tudo, eles NÃO são os mesmos em outras línguas (daí a confusão em primeiro lugar). (+1)
Levite
@ Levit, não, não, você está entendendo totalmente errado . Ninguém possui nomes e idiomas diferentes reutilizam os mesmos nomes de maneiras não iguais. Tudo bem, porque não precisamos de outra maneira padrão de fazer as coisas. A "confusão em primeiro lugar" é devido ao PHP atribuir dois nomes diferentes para uma função ..
Pacerier
2
@ Pacerier: Claro, se você olhar para o ponto de "quem é a culpa", isso é absolutamente certo. Ainda assim, é também um fato que eles simplesmente significam coisas diferentes em vários idiomas (o que é bom). Olhando para ele de uma perspectiva neutra, ele definitivamente é verdadeiro: existe confusão por causa dos diferentes significados (mesmo que seja culpa do php por criar dois apelidos de função iguais). Eu definitivamente não quero apontar um dedo em qualquer dessas línguas, se era isso que você entendeu do meu comentário ... (grande xkcd btw (Y) ^^)
levita
2
Definitivamente, essa deve ser a resposta escolhida, boa descrição!
Cody Brown
Outro usuário respondeu que exit()não fecha a conexão enquanto o die()faz, parece relevante.
Ner0
62
Como afirmado anteriormente, esses dois comandos produzem o mesmo token do analisador.
MAS
Há uma pequena diferença, e é quanto tempo leva para o analisador retornar o token.
Eu não estudei o analisador PHP, mas se for uma lista longa de funções começando com "d" e uma lista mais curta começando com "e", deve haver uma penalidade de tempo procurando o nome da função para funções começando com " e ". E pode haver outras diferenças devido à forma como o nome inteiro da função é verificado.
Duvido que seja mensurável, a menos que você tenha um ambiente "perfeito" dedicado à análise do PHP e muitas solicitações com parâmetros diferentes. Mas deve haver uma diferença, afinal, PHP é uma linguagem interpretada.
@ Timeless, perfeccionistas não diriam "PHP é uma linguagem interpretada". PHP é uma linguagem que pode ser interpretada ou compilada, dependendo da configuração do servidor.
Pacerier
29
E ... "die" tem 3 caracteres e 4 para "exit". Portanto, são necessários 25% menos memória e espaço no arquivo! ;)
Jan Derk
2
'"se for uma lista longa de funções começando com" d "e uma lista mais curta começando com" e ", deve haver uma penalidade de tempo procurando o nome da função para funções começando com" e "'. significa que a penalidade de tempo aconteceria ao procurar a função iniciada por d ? Geralmente, quanto maior a lista, maior o tempo para encontrar um item nela.
Pere
9
Como você escreveu, você não estudou o analisador PHP. Obrigado por esta resposta inútil, pois se baseia nos seus sonhos sobre como o PHP é implementado.
também torna conveniente quando alguém vem de outro idioma, se eles se familiarizam de alguma maneira
Rohan Khude
nota que, se correr php interativamente ( php -a) die;, die();, exit;e exit();não têm nenhum efeito, enquanto exit(sem vírgula) sai do modo interativo.
santiago Arizti
31
Como todas as outras respostas corretas dizem, diee exitsão idênticos / aliases.
Embora eu tenha uma convenção pessoal de que, quando eu quiser terminar a execução de um script quando for esperado e desejado, eu o uso exit;. E quando preciso finalizar a execução devido a alguns problemas (não consegui conectar ao db, não consigo gravar no arquivo etc.), uso die("Something went wrong.");para "matar" o script.
Quando eu 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.
Quando eu uso morrer:
$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 );
Dessa forma, quando vejo exitem algum momento do meu código, sei que neste momento quero sair porque a lógica termina aqui. Quando vejo die, sei que gostaria de continuar a execução, mas não posso ou não devo devido a erro na execução anterior.
Claro que isso só funciona quando se trabalha em um projeto sozinho. Quando há mais pessoas, ninguém as impede de usar dieou exitonde não se encaixa nas minhas convenções ...
Esta página diz que dieé um aliado de exit, então eles são idênticos. Mas também explica que:
existem funções que mudaram de nome devido a uma limpeza de API ou por algum outro motivo e os nomes antigos são mantidos apenas como aliases para compatibilidade com versões anteriores. Geralmente, é uma má idéia usar esse tipo de alias, pois eles podem estar vinculados à obsolescência ou renomeação, o que levará a scripts não portáveis.
Então, me chame de paranóica, mas pode não haver nada dieno futuro.
Ele também diz que, em alguns casos, não há nome preferido entre os vários is_int()e is_integer()é igualmente bom, por exemplo. Observando o php-srchistórico de consolidação no GitHub, a die()construção está no PHP desde 1999, quando foi convertida em um repositório SVN, e provavelmente pelo tempo em que a linguagem existir. Parece absurdo imaginar que isso será depreciado.
Mark Amery
2
@ MarkAmery, embora suas instalações não levem à sua conclusão, a conclusão em si é válida: ~ "Me chame de paranóica, mas pode não haverexit no futuro. Ou pode não haver dieno futuro"
Pacerier
@Pacerier Muito bem. Pode não haver PHP no futuro, então vamos todos sair desse show de programação e nos tornar empreendedores ou cobradores de impostos. Afinal, nada é certo senão a morte e os impostos.
Mark Amery
@ MarkAmery, "Nenhum PHP no futuro" parece estar acima da média paranóica. A história mostrou que idiomas incrivelmente populares não morrem tão facilmente (Fortran!).
Pacerier
1
Não seja paranóico. a saída nunca morrerá . :)
dólmen
10
Esta saída de https://3v4l.org demonstra que die e exit são funcionalmente idênticos.
Esse artigo é simplesmente estranho; pela definição do scanner, você pode dizer que eles são equivalentes; se houver alguma diferença, talvez o teste tenha sido executado sem um opcache.
Ja͢ck 25/11/14
O artigo é sobre uma referência que não pode ser reproduzida, pois o código não é publicado. Ignore isso.
dólmen
0
Funcionalmente, eles são idênticos. Portanto, escolher qual usar é uma preferência totalmente pessoal. Semanticamente em inglês, eles são diferentes. Morrer soa negativo. Quando tenho uma função que retorna dados JSON para o cliente e encerra o programa, pode ser terrível se eu chamar essa função jsonDie (), e é mais apropriado chamá-la de jsonExit (). Por esse motivo, eu sempre uso exit em vez de morrer.
O OP está perguntando apenas sobre as funções de saída e morte do PHP.
Black Mamba
1
Sim, e eu estava respondendo apenas a essa pergunta. No entanto, para estar ciente, a questão não é apenas sobre a diferença de funcionalidade.
Luo Jiong Hui
Uma das minhas funções mais adoráveis é chamada pd () - o que significa Please Die. Então, eu não tenho certeza de que morrer é uma coisa ruim em tal contexto a :)
Ivan Ponomarev
Como desenvolvedor de pilha cheia, não me vejo apenas como programador, mas também como designer de experiência do usuário. E neste contexto, a simpatia é importante. A simpatia não afeta apenas como eu design a interface do usuário, mas também como codifico.
Ele disse que "no PHP, há uma diferença distinta na saída do cabeçalho. Nos exemplos abaixo, eu escolhi usar um cabeçalho diferente, mas para mostrar a diferença entre exit () e die () que não importa", e testado (pessoalmente)
No questionário do w3schools: As funções die () e exit () fazem exatamente a mesma coisa? minha resposta é falsa. Essa é uma resposta incorreta. A resposta certa é verdadeira.
Algo que eu notei nos meus scripts pelo menos é que exit () interrompe o script atualmente em execução e passa o controle de volta para qualquer script de chamada, enquanto o die interrompe o php em suas trilhas. Eu diria que é uma grande diferença?
@AdarshMadrecha isso não é verdade. Se eles estão dentro ou fora de uma subfunção, o script php sempre pára.
MERT DOĞAN
-5
O resultado da função exit () e da função die () é sempre o mesmo. Mas, como explicado na página de manual de alias ( http://php.net/manual/en/aliases.php ), ele diz que a função die () chama a função exit. Eu acho que é codificado como abaixo:
functiondie($msg){exit($msg);}
Isso não é um problema de desempenho para projetos pequenos, médios e grandes, mas se o projeto tiver bilhões, bilhões, processos bilhões, bilhões de processos serão multiplicados, isso acontecerá com um estado de otimização de desempenho muito importante.
Mas muitas pessoas não acham que isso é um problema, porque se você tiver tantos processos, deverá pensar em mais problemas do que se uma função for mestre ou alias.
Mas, a resposta exata é essa; A função principal é sempre mais rápida que o alias.
Finalmente; A página de manual do alias diz que você não pode mais usar o dado. É apenas um alias e está obsoleto.
Geralmente, é uma má idéia usar esse tipo de alias, pois eles podem estar vinculados à obsolescência ou renomeação, o que levará a scripts não portáveis. Esta lista é fornecida para ajudar aqueles que desejam atualizar seus scripts antigos para uma sintaxe mais recente.
O aliasing não está 'chamando uma função'. Verifique suas suposições antes de elaborar hipóteses.
dólmen
@dolmen Aliases sempre chama funções principais em códigos físicos. Esta é uma regra geral de programação.
MERT DOĞAN
@ MERTDOĞAN Um alias não chama nada. Um alias (na programação ou na vida real) é apenas outro nome de um objeto (que já tem um nome). die()não é uma função separada. É apenas outro nome de exit(). Esta resposta contém instruções incorretas sobre aliases e seu desempenho.
axial em 15/03
docs.php.net/manual/en/… Aliases sempre chamam como no exemplo acima. Aprenda alguma coisa e volte.
MERT DOĞAN 16/03/19
-10
Eles soam iguais, no entanto, o exit () também permite definir o código de saída do seu script PHP.
Geralmente, você realmente não precisa disso, mas ao escrever scripts PHP no console, convém verificar, por exemplo, o Bash, se o script concluiu tudo da maneira correta.
Então você pode usar exit () e capturar isso mais tarde. Die () no entanto não suporta isso.
Die () sempre existe com o código 0. Portanto, essencialmente, um comando die () faz o seguinte:
Isso não é verdade. diee exitsão idênticos (eles produzem o mesmo token do analisador ( T_EXIT) e são executados pelo mesmo código). Se o parâmetro for um número inteiro, ele retornará esse código para o shell. Se não estiver, ele irá imprimir-lo e retornar 0. Assim, diee exitsão, literalmente, aliases para cada-outro.
precisa saber é o seguinte
6
bem, se você sabe que pode usar exit ("Estou saindo ...");
Yuda Prawira
4
23 upvotes até agora por uma resposta que é simplesmente falsa! É por isso que nunca voto nas respostas até ler todas as respostas concorrentes da pergunta e compreendê-las todas (exceto as terrivelmente escritas das quais não consigo entender).
Mark Amery
3
É exatamente sobre isso que @GeoffreyHale escreve em sua resposta. O que você postou como resposta é o que se espera, vindo de um idioma como Perl ou C. Mas, como os outros mencionaram, não é verdade para php. Você pode realmente considerar editar sua resposta para refletir isso ou excluí-la de outra forma.
so exit() is exit and die() is also exit :)
Respostas:
Não há diferença - eles são os mesmos.
Manual do PHP para
exit
:Manual do PHP para
die
:fonte
die
para paradas relacionadas a erros eexit
para todos os outros cenários. Parece apenas fluir melhor ao ler o código.die
é muito mais rápido escrever do queexit
... Estou começando a usarexit
porque é mais legível para programadores que não são PHP, masdie
é mais rápido para digitar quando você está em pressa. Além disso, pela maneira como digito, não preciso alterar a posição das minhas mãos para escreverdie
.DIFERENÇA NA ORIGEM
A diferença entre
die()
eexit()
no PHP é sua origem .exit()
é a partirexit()
de C .die()
é a partirdie
de Perl .FUNCIONALMENTE EQUIVALENTE
die()
eexit()
são funções equivalentes.Manual do PHP
Manual do PHP para
die
:Manual do PHP para
exit
:Manual do PHP para aliases de funções :
DIFERENTE EM OUTRAS LÍNGUAS
die()
eexit()
são diferentes em outras linguagens, mas no PHP são idênticas.De outro discurso do PHP :
fonte
exit()
não fecha a conexão enquanto odie()
faz, parece relevante.Como afirmado anteriormente, esses dois comandos produzem o mesmo token do analisador.
MAS
Há uma pequena diferença, e é quanto tempo leva para o analisador retornar o token.
Eu não estudei o analisador PHP, mas se for uma lista longa de funções começando com "d" e uma lista mais curta começando com "e", deve haver uma penalidade de tempo procurando o nome da função para funções começando com " e ". E pode haver outras diferenças devido à forma como o nome inteiro da função é verificado.
Duvido que seja mensurável, a menos que você tenha um ambiente "perfeito" dedicado à análise do PHP e muitas solicitações com parâmetros diferentes. Mas deve haver uma diferença, afinal, PHP é uma linguagem interpretada.
fonte
Manual do PHP sobre die :
Você pode até fazer
die;
da mesma maneira queexit;
- com ou sem parênteses.A única vantagem de escolher
die()
maisexit()
, pode ser o momento você poupar em digitando uma letra extra ;-)fonte
php -a
)die;
,die();
,exit;
eexit();
não têm nenhum efeito, enquantoexit
(sem vírgula) sai do modo interativo.Como todas as outras respostas corretas dizem,
die
eexit
são idênticos / aliases.Embora eu tenha uma convenção pessoal de que, quando eu quiser terminar a execução de um script quando for esperado e desejado, eu o uso
exit;
. E quando preciso finalizar a execução devido a alguns problemas (não consegui conectar ao db, não consigo gravar no arquivo etc.), usodie("Something went wrong.");
para "matar" o script.Quando eu uso exit:
Quando eu uso morrer:
Dessa forma, quando vejo
exit
em algum momento do meu código, sei que neste momento quero sair porque a lógica termina aqui. Quando vejodie
, sei que gostaria de continuar a execução, mas não posso ou não devo devido a erro na execução anterior.Claro que isso só funciona quando se trabalha em um projeto sozinho. Quando há mais pessoas, ninguém as impede de usar
die
ouexit
onde não se encaixa nas minhas convenções ...fonte
Aqui está algo que é bastante interessante. Embora
exit()
edie()
sejam equivalentes,die()
fecha a conexão.exit()
não fecha a conexão.die()
:exit()
:Resultados:
exit()
:die()
:Basta considerar a necessidade de levar isso em conta no seu projeto.
Créditos: https://stackoverflow.com/a/20932511/4357238
fonte
exit
edie
funcionam da mesma maneira, ambos estreita ligação.Em termos de funcionalidade, eles são idênticos, mas eu os uso nos seguintes cenários para tornar o código legível:
Use die () quando houver um erro e precise interromper a execução.
por exemplo
die( 'Oops! Something went wrong' );
Use exit () quando não houver um erro e precise interromper a execução.
por exemplo
exit( 'Request has been processed successfully!' );
fonte
Esta página diz que
die
é um aliado deexit
, então eles são idênticos. Mas também explica que:Então, me chame de paranóica, mas pode não haver nada
die
no futuro.fonte
is_int()
eis_integer()
é igualmente bom, por exemplo. Observando ophp-src
histórico de consolidação no GitHub, adie()
construção está no PHP desde 1999, quando foi convertida em um repositório SVN, e provavelmente pelo tempo em que a linguagem existir. Parece absurdo imaginar que isso será depreciado.exit
no futuro. Ou pode não haverdie
no futuro"Esta saída de https://3v4l.org demonstra que die e exit são funcionalmente idênticos.
fonte
Eles são essencialmente os mesmos, embora este artigo sugira o contrário.
fonte
Funcionalmente, eles são idênticos. Portanto, escolher qual usar é uma preferência totalmente pessoal. Semanticamente em inglês, eles são diferentes. Morrer soa negativo. Quando tenho uma função que retorna dados JSON para o cliente e encerra o programa, pode ser terrível se eu chamar essa função jsonDie (), e é mais apropriado chamá-la de jsonExit (). Por esse motivo, eu sempre uso exit em vez de morrer.
fonte
Pelo que sei quando olho para esta pergunta aqui
Ele disse que "no PHP, há uma diferença distinta na saída do cabeçalho. Nos exemplos abaixo, eu escolhi usar um cabeçalho diferente, mas para mostrar a diferença entre exit () e die () que não importa", e testado (pessoalmente)
fonte
No questionário do w3schools: As funções die () e exit () fazem exatamente a mesma coisa? minha resposta é falsa. Essa é uma resposta incorreta. A resposta certa é verdadeira.
Aqui está a captura de tela:
fonte
Algo que eu notei nos meus scripts pelo menos é que exit () interrompe o script atualmente em execução e passa o controle de volta para qualquer script de chamada, enquanto o die interrompe o php em suas trilhas. Eu diria que é uma grande diferença?
fonte
O resultado da função exit () e da função die () é sempre o mesmo. Mas, como explicado na página de manual de alias ( http://php.net/manual/en/aliases.php ), ele diz que a função die () chama a função exit. Eu acho que é codificado como abaixo:
Isso não é um problema de desempenho para projetos pequenos, médios e grandes, mas se o projeto tiver bilhões, bilhões, processos bilhões, bilhões de processos serão multiplicados, isso acontecerá com um estado de otimização de desempenho muito importante.
Mas muitas pessoas não acham que isso é um problema, porque se você tiver tantos processos, deverá pensar em mais problemas do que se uma função for mestre ou alias.
Mas, a resposta exata é essa; A função principal é sempre mais rápida que o alias.
Finalmente; A página de manual do alias diz que você não pode mais usar o dado. É apenas um alias e está obsoleto.
fonte
die()
não é uma função separada. É apenas outro nome deexit()
. Esta resposta contém instruções incorretas sobre aliases e seu desempenho.Eles soam iguais, no entanto, o exit () também permite definir o código de saída do seu script PHP.
Geralmente, você realmente não precisa disso, mas ao escrever scripts PHP no console, convém verificar, por exemplo, o Bash, se o script concluiu tudo da maneira correta.
Então você pode usar exit () e capturar isso mais tarde. Die () no entanto não suporta isso.
Die () sempre existe com o código 0. Portanto, essencialmente, um comando die () faz o seguinte:
Qual é o mesmo que:
fonte
die
eexit
são idênticos (eles produzem o mesmo token do analisador (T_EXIT
) e são executados pelo mesmo código). Se o parâmetro for um número inteiro, ele retornará esse código para o shell. Se não estiver, ele irá imprimir-lo e retornar 0. Assim,die
eexit
são, literalmente, aliases para cada-outro.