/ / Por que não consigo capturar esta exceção 'Maximum Nested Function' no PHP? - php, função, exceção, aninhada, try-catch

Por que não consigo capturar esta exceção 'Maximum Nested Function' no PHP? - php, função, exceção, aninhada, try-catch

Estou experimentando uma exceção devido a uma recursivafunção no meu código, devido à natureza do que estou codificando, a exceção pode apenas ser ignorada e FALSE retornou em vez disso. Então aqui está um código simplificado para ilustrar o meu problema.

function recursive() {
try{ recursive(); }
catch(Exception $e)
{ echo "Error Caught!"; }
}
recursive();

Eu não consigo pegar o nível de aninhamento Maximum Function de "100" atingido, abortando! Eu entendi mal como o trabalho do try-catch?

Respostas:

2 para resposta № 1

Porque é um erro fatal e não uma exceção, então você não pode usar o try & catch.

Um erro em geral significa que a execução do programa por todos os meios não pode continuar e deve ser abordada.

Uma Exceção, por outro lado, é como um aviso, o que significa que algo deu errado, mas com o tratamento correto desta exceção, a execução do programa pode continuar.

Um exemplo de try & catch poderia ser: tente se conectar ao banco de dados ... function connect gera uma exceção porque o servidor de banco de dados não está acessível ... você captura a exceção e decide, bem, então, deixa ler o material de um arquivo armazenado em cache. A intenção por trás da exceção é permitir que o desenvolvedor decida se deseja capturar a exceção e continuar a execução do programa ou suspendê-la.


0 para resposta № 2

"PHP Erro fatal: nível máximo de aninhamento de função de" 100 "alcançado, abortando!"

É um "erro fatal", não uma exceção. Não há nenhuma maneira no PHP para convertê-lo para Exception usando set_error_handler (o que é bom para converter erros de nível inferior para exceções).

Em caso de "erro fatal" a única coisa que você podefazer é fazer alguma limpeza usando register_shutdown_function onde você pode chamar error_get_last e reconhecer que esse erro fatal específico ocorreu. Mas isso é tudo que você pode fazer, não há como continuar o fluxo do programa projetado.

BTW este erro fatal partical pode acontecer somente quando você tem o módulo XDebug habilitado em seu php.ini.