Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou estudando tratamento de exceções e estou fazendo testes com função definida pelo usuário, assim, quando uma exceção for lançada e não houver um catch para tratar, não da Fatal error.
O problema: Se a exceção for tratada na função definida pelo usuário, o script não continua a sua execução, ele para como um exit() no final da função definida pelo usuário.
EXEMPLO 1
Exemplo simples para entender
<?php
//seta função para pegar exceções não tratadas em try/catch
set_exception_handler("pegaExcecapSemTratamento");
//função definida pelo usuário para pegar exceções não tratadas
function pegaExcecapSemTratamento($e)
{
echo 'Exceção pega sem tratamento:</br>', $e->getMessage(), '</br></br></br>';
}
//extensões das exceções para usar na aplicação
class MyException extends Exception {}
class My2Exception extends Exception {}
class My3Exception extends Exception {}
class Teste
{
public function __construct()
{
throw new My3Exception("You caught me!");
}
}
try
{
//irá executar função pegaExcecapSemTratamento(), pois não houve tratamento adequado nos catch
new Teste();
} echo $e->getMessage(), ' MyException';
} echo $e->getMessage(), ' My2Exception';
}
echo("continua executando a aplicação");
?>
EXEMPLO 2
Agora um exemplo convencional de tratamento de exceção
<?php
set_exception_handler("pegaExcecapSemTratamento");
//função definida pelo usuário para pegar exceções não tratadas
function pegaExcecapSemTratamento($e)
{
echo 'Exceção pega sem tratamento:</br>', $e->getMessage(), '</br></br></br>';
}
//extensões das exceções para usar na aplicação
class MyException extends Exception {}
class My2Exception extends Exception {}
class My3Exception extends Exception {}
class Teste
{
public function __construct()
{
throw new My3Exception("You caught me!");
}
}
try
{
//irá executar o catch correto e não vai travar o script
new Teste();
} echo $e->getMessage(), ' MyException';
} echo $e->getMessage(), ' My2Exception';
} echo $e->getMessage(), ' My2Exception';
}
echo("continua executando a aplicação");
?>
No exemplo 1, a mensagem dada com echo no final do script não foi executada, ou seja, no meu ver, a função definida para tratamento de exeções teve um exit() no final.
Agora no exemplo 2, o script continuou a executar (o echo no final do script foi executado).
Por que quando passa pela função definida pelo usuário (no caso aqui a pegaExcecapSemTratamento()) ela não continua a execução do script, porém, no caso de exceções pegas com catch, a execução do script continua normalmente?
Alguém pode ajudar?
Carregando comentários...