Ho una grande espressione matematica che deve essere creata dinamicamente. Ad esempio, dopo aver analizzato "qualcosa" il risultato sarà una stringa come: "$foo+$bar/$baz";
.PHP, Come prendere una divisione per zero?
Quindi, per calcolare il risultato di tale espressione sto usando la funzione eval
... qualcosa di simile:
eval("\$result = $expresion;");
echo "The result is: $result";
Il problema qui è che a volte si verificano errori che dice che c'è stata una divisione per zero, e non so come catturare quell'eccezione. Ho provato cose come:
eval("try{\$result = $expresion;}catch(Exception \$e){\$result = 0;}");
echo "The result is: $result";
Oppure:
try{
eval("\$result = $expresion;");
}
catch(Exception $e){
$result = 0;
}
echo "The result is: $result";
Ma non funziona. Quindi, come posso evitare che la mia applicazione si chiuda in modo anomalo quando c'è una divisione per zero?
Edit:
In primo luogo, voglio chiarire una cosa: l'espressione è costruita in modo dinamico, quindi non posso solo eval se il denominatore è zero. Quindi ... per quanto riguarda il commento di Mark Baker, lasciatemi fare un esempio. Il mio parser potrebbe costruire qualcosa di simile:
"$foo + $bar * ($baz/($foz - $bak))"
Il parser costruire passo dopo passo stringa senza preoccuparsi del valore delle Vars ... quindi in questo caso, se $foz == $bak
c'è infatti una divisione per zero: $baz/(0)
.
D'altra parte, come ha suggerito Pete, ho provato:
<?php
$a = 5;
$b = 0;
if(@eval(" try{ \$res = $a/$b; } catch(Exception \$e){}") === FALSE)
$res = 0;
echo "$res\n";
?>
Ma non stampa nulla.
Potete controllare se '$ expression' sta dividendo per zero anticipo? –
@Anthony Forloney: Bella domanda, la mia risposta ha creduto che potessi, ma se Cristian sta davvero usando eval per questo, allora la risposta è probabilmente "no". – Powerlord
L'uso di 'eval' può essere una cattiva idea. Ora lascerai che il tuo utente finale esegua il codice PHP sul tuo server.Non conosco un'alternativa, quindi non sto inviando una risposta, ma dovresti pensare se vuoi che io sia in grado di digitare qualsiasi codice PHP, non importa quanto sia distruttivo nella tua pagina web. – Umang