百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 直击PHP的异样和差错处置
分享文章到:

直击PHP的异样和差错处置

发布时间:09/01 来源:未知 浏览: 关键词:


非常和错误

示例:

  $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的非常和错误处置的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板