直击PHP的异常和错误处理-php教程

资源魔 90 0


异样以及谬误

示例:

  $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的异样以及谬误解决的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 处理异常

抱歉,评论功能暂时关闭!