除以零警告不会在PHP try / catch块中捕获

时间:2011-05-18 06:05:04

标签: php exception try-catch

我有这个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块。我做错了什么?

3 个答案:

答案 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;

现在您可以测试该值并查看它是否具有它具有的值