動的に作成する必要がある大きな数式があります。たとえば、「何か」を解析すると、結果は次のような文字列になります"$foo+$bar/$baz";
。
したがって、その式の結果を計算するために、eval
関数を使用しています...次のようなものです:
eval("\$result = $expresion;");
echo "The result is: $result";
ここでの問題は、ゼロによる除算があったというエラーが表示されることがあり、その例外をキャッチする方法がわからないことです。私は次のようなことを試しました:
eval("try{\$result = $expresion;}catch(Exception \$e){\$result = 0;}");
echo "The result is: $result";
または:
try{
eval("\$result = $expresion;");
}
catch(Exception $e){
$result = 0;
}
echo "The result is: $result";
しかし、うまくいきません。では、ゼロ除算が発生したときにアプリケーションがクラッシュしないようにするにはどうすればよいでしょうか?
編集:
まず、明確にしたいことがあります。式は動的に構築されるため、分母がゼロの場合は評価できません。では、Mark Baker のコメントについて、例を挙げましょう。私のパーサーは次のようなものを構築できます:
"$foo + $bar * ( $baz / ( $foz - $bak ) )"
パーサーは、変数の値を気にせずに文字列を段階的に構築します...したがって、この場合$foz == $bak
、実際にゼロによる除算がある場合: $baz / ( 0 )
.
一方、ピートが提案したように、私は試しました:
<?php
$a = 5;
$b = 0;
if(@eval(" try{ \$res = $a/$b; } catch(Exception \$e){}") === FALSE)
$res = 0;
echo "$res\n";
?>
しかし、それは何も印刷しません。