Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao tratar exception division by zero

Pessoal alguém sabe o motivo do PHP não estar tratando a exception que ocorre por dividir um número por zero ?

Estou tentando fazer ele retornar uma exception personalizada, mas sempre retorna a padrão "division by zero". Alguém sabe o motivo disso?

segue o código

<?php

try {
    echo 1 / 0;
} catch (DivisionByZeroError $e) {
    echo "got by zero";
} catch (ErrorException $e) {
    echo "got exception by zero";
}

resultado


C:\tools\php74\php.exe D:\Workspace\PHP\Exceptions\pilha.php
INFPHP Warning:  Division by zero in 
D:\Workspace\PHP\Exceptions\pilha.php on line 4

Process finished with exit code 0
2 respostas
solução!

Oi Denis, como você está?

Observe que quando fazemos apenas 1/0 utilizando o operador "/"(barra), ao invés de ser nos gerado uma exceção é nos gerado um warning:

INFPHP Warning:  Division by zero in 

Por isso o catch não consegue capturar, já que não é uma exceção e sim um aviso. Para capturar a exceção, podemos utilizar a função intdiv (usada para dividir inteiros):

intdiv ( int $dividendo , int $divisor )

Caso o divisor seja zero, o intdiv irá nos gerar uma exceção do tipo DivisionByZeroError. Se o dividendo for PHP_INT_MIN e o divisor for -1, será lançada uma exceção do tipo ArithmeticError.

Tente com o intdiv:

<?php

try {
    echo intdiv(1, 0);
} catch (DivisionByZeroError $e) {
    echo "got by zero";
} catch (ErrorException $e) {
    echo "got exception by zero";
}

E qualquer dúvida não hesite em perguntar, estou por aqui. Bons Estudos!

Explicação perfeita, Nádia. Eu não teria explicado melhor.

Só um ponto a mais, Denis... No último capítulo do curso essa parte de Warnings, erros, etc. fica bem mais clara, beleza? :-)