我有这个PHP代码。只要y
变为零,它就会显示警告而不是捕获异常。我的代码有什么问题吗?
try
{
return($x % $y);
throw new Exception("Divide error..");
}
catch(Exception $e){
echo "Exception:".$e->getMessage();
}
我收到了这个警告:
Warning: Division by zero in file.php
未运行catch块。我做错了什么?
答案 0 :(得分:7)
警告也不例外。使用异常处理技术无法捕获警告。永远不会抛出你自己的异常,因为你之前总是return
。
您可以使用@
等@($x % $y)
运算符取消警告,但您应该做的是确保$y
不会变为0。
即:
if (!$y) {
return 0; // or null, or do something else
} else {
return $x % $y;
}
答案 1 :(得分:3)
是的,您正在return
之前执行throw
。因此,throw
永远不会被执行,也不会抛出或捕获任何异常。
答案 2 :(得分:-1)
这是应该如何做的
$value;
try
{
$value = $x%$y;
}
catch(Exception $e){
throw new Exception("Divide error..");
echo "Exception:".$e->getMessage();
}
return $value
但是,如果要隐藏错误并分别处理错误,则会收到警告
您可以使用@
符号
$value = @$x%$y;
现在您可以测试该值并查看它是否具有它具有的值