Php 尝试捕获不起作用的 php 7.0.4


Php try catch not working php 7.0.4

try{
//division by zero
$number = 5/0;
}
catch(Exception $ex){
echo 'Got it!';
}
Warning: Division by zero in D:'Sistemim'Server'WebSite'mckportal'test'hatakont.php on line 13

可能是什么原因?我该如何解决?他使用的是 PHP 5.3。7.0.4 版本不起作用。

我终于找到了解决问题的方法。示例:https://3v4l.org/jk7BS

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    if (!!$errstr) {
        throw new Exception($errstr);
    }
    return false;
}
set_error_handler('myErrorHandler');

编写此代码后,您可以控制,例如 Java 和其他语言中的异常。

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    if (!!$errstr) {
        throw new Exception($errstr);
    }
    return false;
}
set_error_handler('myErrorHandler');
try{
    //division by zero
    //$number = 5/0;
    unlink("c:'boot.bat");
    $a=5+3;
    echo $a;
}
    catch(Exception $ex){
    echo  "Dotum bi hata yapmış olmalısın mesaj bu:".$ex->getMessage(), ' : Hadi kolay gelsin sana canım'; 
}

首先,您发布的代码在 PHP 5 和 PHP 7 上的工作方式相同。它没有用于在 PHP 5 上抛出异常;此功能(抛出异常而不是触发运行时错误和警告)是在 PHP 7 中引入的。

你可以在 PHP 5 中(在 PHP 7 中仍然可以)安装一个错误处理程序,将错误转换为异常并抛出它们。已经有几个链接(在其他答案和注释中)指向显示此技术的答案。

新类DivisionByZeroError的文档(在 PHP 7 中引入)解释道:

当尝试将数字除以零时,将抛出DivisionByZeroError

不幸的是,似乎异常仅在$x % 0intdiv($x, 0)上抛出。使用常规除法运算符 $x / 0 除以零不会引发异常,它的工作方式仍然与在 PHP 5 上的工作方式相同(即触发警告)。

在PHP支持站点上报告了一个错误#71306,但它被正式归类为"不是错误",因为除法运算符/产生浮点数,浮点表示形式提供对±INFNaN的支持。

总之,在 PHP 7 中,使用 / 除以零会触发警告并返回 INF-INF 。只有模运算符(%)和整数除法(函数intdiv())在除法器为零时抛出DivisionByZeroError

以零将返回警告,并且异常处理程序无法捕获警告。请参阅 https://stackoverflow.com/a/6040555/1441858。

抱歉,我现在看到 PHP7 在除以零时抛出错误。