我只是想在try-catch块周围放一个算术表达式。
这是我尝试过的:
try
{
$result = 4/0;
}
catch (Exception $e)
{
d($e->getMessage());
}
但是不是打印$e->getMessage()
,而是显示Internal Server Error Division By Zero
,如果我不使用任何 try-catch,这是相似的。
我做错了什么?
你不能在普通算术上捕获 DivisionByZeroError,因为 PHP 认为这是一个警告,而不是一个错误。相反,您需要设置一个错误处理程序来查找它,例如
function handler($errno, $error) {
if ($error == "Division by zero") {
echo "Error $errno! $errorn";
return;
}
// hand processing back to the standard handler
return false;
}
set_error_handler('handler');
$result = 4/0;
输出:
Error 2! Division by zero
请注意,如果这不是您要查找的错误,则错误处理程序应将控制权返回给标准处理程序(通过返回false
(。
你必须使用这个:
try
{
$result = intdiv(4, 0);
}
catch(DivisionByZeroError $e)
{
d($e->getMessage());
}
PHP 手册 : http://php.net/manual/en/class.divisionbyzeroerror.php (适用于PHP 7
及以上版本(
更新:使用intdiv()
- 整数除法(适用于PHP 7
及以上版本(