exit()
A função exit() em PHP encerra imediatamente o script atual e retorna um código de saída especificado.
O que a Função exit() Faz
A função exit() em PHP interrompe o script atual exatamente onde é chamada. Nenhum código adicional é executado após ela — o script termina imediatamente. É usada com mais frequência para interromper a execução após um redirecionamento, quando uma condição fatal é detectada ou para exibir uma mensagem final antes de encerrar.
exit é um construto de linguagem, não uma função comum, portanto os parênteses são opcionais: exit; e exit(); funcionam igualmente. die() é um alias exato de exit() — eles se comportam de forma idêntica, e qual dos dois você usa é puramente uma questão de estilo. Consulte o capítulo sobre die() para saber mais sobre o alias.
Esta página aborda o que exit() faz, a diferença entre seus argumentos de status e mensagem, os códigos de saída que retorna ao shell e os erros comuns a evitar.
Sintaxe e o Argumento Opcional
exit(int|string $status = 0): neverexit() aceita um único argumento opcional que pode ser um inteiro ou uma string, e os dois são tratados de forma muito diferente:
- Inteiro — usado como o status de saída do processo (0–254). Não é impresso. Por convenção,
0significa sucesso e qualquer valor diferente de zero indica um erro. Isso é importante quando um script é executado a partir da linha de comando e outro programa inspeciona seu código de saída. - String — impressa imediatamente antes do encerramento do script, e o status de saída é
0. Útil para exibir uma mensagem de erro final.
Se você chamar exit() sem argumento, o script termina com status 0 e não imprime nada.
Exibindo uma Mensagem Antes de Encerrar
Quando você passa uma string, o PHP a exibe e então para:
<?php
$config = @file_get_contents('config.ini');
if ($config === false) {
exit("Fatal: config.ini could not be read.\n");
}
echo "Config loaded.\n";Se o arquivo estiver ausente, o script imprime Fatal: config.ini could not be read. e o echo final nunca é executado.
Retornando um Código de Saída ao Shell
Quando você passa um inteiro, nada é impresso, mas o valor se torna o código de saída do processo — útil para scripts executados no terminal ou em um pipeline de CI:
<?php
$ok = false; // pretend a check failed
if (!$ok) {
exit(1); // non-zero = failure
}
exit(0); // successAo executar isso com php script.php e depois echo $? no shell, o resultado seria 1. Um programa chamador pode tomar decisões com base nesse código sem precisar analisar nenhuma saída.
Interrompendo um Script Após um Redirecionamento
O caso de uso web clássico é garantir que nenhum código adicional seja executado após o envio de um cabeçalho Location:
<?php
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit();
}
// Protected code below only runs for logged-in users.Sem o exit(), o PHP continuaria executando as linhas após o redirecionamento — potencialmente expondo conteúdo protegido a um usuário que deveria ter sido enviado para a página de login. Veja header() e PHP Sessions para entender as peças das quais este trecho depende.
Erros Comuns
exit()executa funções de encerramento e destrutores de objetos, mas não descarrega um buffer de saída iniciado comob_start()se você sair no meio do buffer em configurações mais antigas — feche os buffers explicitamente quando isso for importante.- Códigos de status acima de 254 são reservados. Use
0–254;255é usado internamente pelo PHP. - Não use
exit()como controle de fluxo normal. Dentro de funções, retorne um valor ou lance uma exceção para que o chamador possa reagir. Umexit()enterrado em uma função torna o código difícil de testar, pois mata todo o processo em vez de apenas a chamada. - Um argumento string não é um código de erro.
exit("5")imprime5e sai com status0, enquantoexit(5)sai com status5e não imprime nada.
Resumo
exit() (e seu alias die()) encerra um script PHP imediatamente. Passe um inteiro para definir o status de saída do shell, ou uma string para exibir uma mensagem final. É ideal para interromper a execução após um redirecionamento ou em caso de erro irrecuperável, mas para ramificações comuns prefira if/else, valores de retorno e exceções para que seu código permaneça testável.