首页后端开发PHP直击PHP的异常和错误处理

直击PHP的异常和错误处理

时间2024-02-02 04:58:03发布访客分类PHP浏览628
导读:收集整理的这篇文章主要介绍了直击PHP的异常和错误处理,觉得挺不错的,现在分享给大家,也给大家做个参考。异常和错误示例: $num = 0; try { echo 1/$num; } catch (Excepti...
收集整理的这篇文章主要介绍了直击PHP的异常和错误处理,觉得挺不错的,现在分享给大家,也给大家做个参考。


异常和错误

示例:

  $num = 0;
    try {
            echo 1/$num;
    }
 catch (Exception $e){
            echo $e->
    getMessage();
//并不能执行到这里    }
    //说明try{
}
catch{
}
    是用于捕获异常的,而错误是不能捕获到的。     //手动抛出异常进行捕获    $num = 0;
    try {
        if($num == 0){
                //通过if判断可以处理错误,手动抛出异常(如何实现自动捕获错误呢,需结合三个php内置函数)            throw new Exception('除数为零');
        }
            echo 1/$num;
    }
 catch (Exception $e){
            echo $e->
    getMessage();
    }

什么是异常

程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。

什么是错误

属于 php 脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice 都是错误,只是他们的级别不同而已,并且错误是不能被 try-catch 捕获的

错误的分类

Fatal Error: 致命错误(脚本终止运行)

E_ERROR // 致命的运行错误,错误无法恢复,暂停执行脚本

E_CORE_ERROR // PHP 启动时初始化过程中的致命错误

E_COMPILE_ERROR // 编译时致命性错,就像由 Zend 脚本引擎生成了一个 E_ERROR

E_USER_ERROR // 自定义错误消息。像用 PHP 函数 trigger_error(错误类型设置为:E_USER_ERROR)

Parse Error:编译时解析错误,语法错误(脚本终止运行)

E_PARSE // 编译时的语法解析错误

Warning Error:警告错误(仅给出提示信息,脚本不终止运行)

E_WARNING // 运行时警告 (非致命错误)。

E_CORE_WARNING // PHP 初始化启动过程中发生的警告 (非致命错误) 。

E_COMPILE_WARNING // 编译警告

E_USER_WARNING // 用户产生的警告信息

Notice Error:通知错误(仅给出通知信息,脚本不终止运行)

E_NOTICE // 运行时通知。表示脚本遇到可能会表现为错误的情况.

E_USER_NOTICE // 用户产生的通知信息。

5 类是产生 ERROR 级别的错误,这种错误直接导致 PHP 程序退出。分别是 ERROR = E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_PARSE

如何实现捕获错误

实现用 try { } catch (Exception $e){ } 捕获异常的方式,来捕获错误,需借助三个函数

// 注册一个会在Php中止时执行的函数    register_shutdown_function('myShutdownFunction');
    function myShutdownFunction()    {
        if ($error = error_get_last()) {
                var_dump('b>
    register_shutdown_function: TyPE:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '/b>
    ');
        }
    }
    
//注册异常处理函数, 没有捕获处理的异常,将统一再这里处理    set_exception_handler('myException');
    function myException($exception)    {
            VAR_dump("b>
    set_exception_handler: Exception: " . $exception->
    getMessage()  . '/b>
    ');
    }
    

 //注册错误处理函数    set_error_handler('myError');
    function myError($type, $message, $file, $line)    {
            //var_dump('b>
    set_error_handler: ' . $type . ':' . $message . ' in ' . $file . ' on ' . $line . ' line ./b>
    br />
    ');
            throw new Exception($message);
    }
    


捕获所有错误的原理

由 set_error_handler () 可知,他能够捕获一部分错误,不能捕获系统级 E_ERROR、E_PARSE 等错误,但是这部分可以由 register_shutdown_function () 捕获。所以两者结合能出现很好的功能。

小结

三个函数实现自动捕获异常和错误

set_error_handler () 只能够捕获部分错误

register_shutdown_function () 结合 set_error_handler () 函数,能捕获所有错误

set_exception_handler () 用于捕获异常

error_get_last () 最后终止错误信息

在捕获错误的函数中,再手动抛出异常,即实现 set_exception_handler 能够捕获错误。

推荐教程:《PHP视频教程》

以上就是直击PHP的异常和错误处理的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 直击PHP的异常和错误处理
本文地址: https://pptw.com/jishu/596390.html
PHP还能开发什么? PHP之curl

游客 回复需填写必要信息