PHP异常处理

简单的异常捕获

<?php #应用类
namespace Home\Controller;
class TestController{
    function a(){
        try{
            throw new \Exception('异常');
        }catch (\Exception $exception){
            echo $exception->getMessage(); #异常
        }
    }
}

如果类中有20个方法,每个都try_catch?
可以写个基类,在基类的构造函数里注册一个异常处理函数,其他的类继承这个基类

<?php #基类
namespace Home\Controller;
class MyController{
    public function __construct () {
        //set_exception_handler() 接收一个callable
        set_exception_handler(
            function (\Throwable $exception){
                echo $exception->getMessage();
            }
        );
    }
}

继承基类,所有的异常都会抛出给基类,基类可以做统一处理.

<?php #应用类
namespace Home\Controller;
class TestController extends MyController {
    function a(){
        throw new \Exception('异常aaa');#异常aaa
    }
    function b(){
        throw new \Exception('异常bbb');#异常bbb
    }
    function c(){
        throw new \mysqli_sql_exception('数据库异常'); #数据库异常
    }
    function d(){
        set_time_limit(1);
        while(true){}
    }
    function e(){
        ini_set('memory_limit','10M');
        while (true){
            $data[] = 1;
        }
    }
  
}

注意最后两个方法
function d()报错超时
function e()报错内存溢出
并不能被基类捕获
可以注册一个register_shutdown_function(),该方法在脚本结束时执行.

#index.php 入口文件
register_shutdown_function(
    function (){
        $error = error_get_last();
        if ($error){
            dump($error);
        }
    }
);

要注意的是,这个函数可以出现多次,并按注册先后顺序执行,前边的执行了exit(); 后续的将不会执行.有的框架如tp3.2.3已经注册了此方法,并且他内部执行了exit(); 想让自己的方法执行,应该早于框架注册, 可以放在index.php文件中,这样便能处理超时和内存溢出错误

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文介绍php开源库BooBoo,是一个处理php异常和错误的开源库,通过简单的分析代码,我们知道了实际项目中怎么...
    小聪明李良才阅读 772评论 0 6
  • 这篇文章主要对php中的错误处理进行简单的记录 php一开始被设计为一门面向过程的语言,所以异常处理没有使用像Ja...
    BrucelLi阅读 443评论 0 0
  • 异常(Exception)用于在指定的错误发生时改变脚本的正常流程。 什么是异常?PHP 5 提供了一种新的面向对...
    林路同阅读 682评论 0 0
  • 定义和用法 set_exception_handler() 函数设置用户自定义的异常处理函数。该函数用于创建运行时...
    吕艳凯阅读 457评论 0 0
  • 异常(Exception)用于在指定的错误发生时改变脚本的正常流程。 什么是异常? PHP 5 提供了一种新的面向...
    josephok阅读 586评论 0 7