PHP, sıfıra bölme yakalamak nasıl?

0 Cevap php

Ben dinamik oluşturulacak olan büyük bir matematiksel ifade var. "$foo+$bar/$baz";: Ben "şey" çözümlü kez Örneğin, sonuç gibi bir dize olacaktır.

Yani, bu gibi eval function ... şey kullanıyorum bu ifadenin sonucunu hesaplamak için:

eval("\$result = $expresion;");
echo "The result is: $result";

Burada sorun, bazen bir bölümü sıfıra olduğunu söylüyor hataları olsun, ve ben bu özel durum yakalamak için nasıl bilmiyorum olmasıdır. Gibi şeyler denedim:

eval("try{\$result = $expresion;}catch(Exception \$e){\$result = 0;}");
echo "The result is: $result";

Veya:

try{
    eval("\$result = $expresion;");
}
catch(Exception $e){
    $result = 0;
}
echo "The result is: $result";

Ama çalışmıyor. Yani, nasıl bir sıfıra bölünme olduğu zaman benim uygulama çöker önleyebilirsiniz?

Edit:

Öncelikle, ben bir şey açıklamak istiyorum: ifade dinamik inşa edilmiştir, yani payda sıfır ise sadece eval olamaz. Yani ... Mark Baker açıklama getirmedi, sana bir örnek vereyim. Benim ayrıştırıcı böyle bir şey inşa olabilir:

"$foo + $bar * ( $baz / ( $foz - $bak ) )"

Ayrıştırıcı ... vars değeri endişesi olmadan adım adım inşa dize böylece bu durumda $foz == $bak bir bölümü sıfıra aslında varsa: $baz / ( 0 ).

Pete önerdiği gibi Öte yandan, denedim:

<?php
$a = 5;
$b = 0;

if(@eval(" try{ \$res = $a/$b; } catch(Exception \$e){}") === FALSE)
        $res = 0;
echo "$res\n";
?> 

Ama hiçbir şey yazmıyor.

0 Cevap