PHP, Como pegar uma divisão por zero?
Eu tenho uma grande expressão matemática que deve ser criada dinamicamente. Por exemplo, depois de analisar "algo", o resultado será uma sequência como:"$foo+$bar/$baz";
.
Então, para calcular o resultado dessa expressão, estou usando oeval
função ... algo como isto:
eval("\$result = $expresion;");
echo "The result is: $result";
O problema aqui é que às vezes recebo erros que indicam que houve uma divisão por zero e não sei como capturar essa exceção. Eu tentei coisas como:
eval("try{\$result = $expresion;}catch(Exception \$e){\$result = 0;}");
echo "The result is: $result";
Ou:
try{
eval("\$result = $expresion;");
}
catch(Exception $e){
$result = 0;
}
echo "The result is: $result";
Mas não funciona. Então, como posso evitar que meu aplicativo falhe quando há uma divisão por zero?
Editar:
Primeiro, quero esclarecer uma coisa: a expressão é construída dinamicamente, por isso não posso avaliar se o denominador é zero. Então ... com relação ao comentário de Mark Baker, deixe-me dar um exemplo. Meu analisador poderia criar algo parecido com isto:
"$foo + $bar * ( $baz / ( $foz - $bak ) )"
O analisador constrói a string passo a passo sem se preocupar com o valor dos vars ... portanto, neste caso, se$foz == $bak
de fato, há uma divisão por zero:$baz / ( 0 )
.
Por outro lado, como Pete sugeriu, tentei:
<?php
$a = 5;
$b = 0;
if(@eval(" try{ \$res = $a/$b; } catch(Exception \$e){}") === FALSE)
$res = 0;
echo "$res\n";
?>
Mas não imprime nada.