10.2.3 自定义异常类

10.2.3 自定义异常类

系统自带异常处理

<?php
class Exception{
  protected $message = 'Unknown exception';   // 异常信息
protected $code = 0;                  // 用户自定义异常代码
protected $file;                      // 发生异常的文件名
protected $line;                      // 发生异常的代码行号
 function __construct($message = null, $code = 0);
final function getMessage();          // 返回异常信息
final function getCode();             // 返回异常代码
final function getFile();             // 返回发生异常的文件名
final function getLine();             // 返回发生异常的代码行号
 final function getTrace();            // backtrace() 数组
 final function getTraceAsString();  // 已格成化成字符串的 getTrace() 信息
  /* 可重载的方法 */
 function __toString();                // 可输出的字符串
}
<?php
    /* 自定义的一个异常处理类,但必须是扩展内异常处理类的子类 */
    class MyException extends Exception{
        //重定义构造器使第一个参数 message 变为必须被指定的属性
        public function __construct($message, $code=0){
            //可以在这里定义一些自己的代码
         //建议同时调用 parent::construct()来检查所有的变量是否已被赋值
            parent::__construct($message, $code);
        }   
        public function __toString() {        
          //重写父类方法,自定义字符串输出的样式
          return __CLASS__.":[".$this->code."]:".$this->message."<br>";
        }
        public function customFunction() {    
             //为这个异常自定义一个处理方法
             echo "按自定义的方法处理出现的这个类型的异常<br>";
        }
    }
?>

自定义异常

<?php
   try { //使用自定义的异常类捕获一个异常,并处理异常
        $error = '允许抛出这个错误';       
        throw new MyException($error);    
            //创建一个自定义的异常类对象,通过throw语句抛出
        echo 'Never executed'; 
            //从这里开始,try代码块内的代码将不会再被执行
    } catch (MyException $e) {        //捕获自定义的异常对象
        echo '捕获异常: '.$e;        //输出捕获的异常消息
        $e->customFunction();  //通过自定义的异常对象中的方法处理异常
    }
    echo '你好呀';              //程序没有崩溃继续向下执行

test.php

<?php
/*
1. 自定义的异常类, 必须是系统类Exception的子类
2. 如果继承Exception类, 重写了构造方法,一定要调一下父类中被覆盖的方法
 */


    //写出对应这个异常解决方法, 就是一下正常类的结构
    class MyBtException extends Exception{
        function __construct($mess) {
            parent::__construct($mess);


        }

        function changBt() {
            echo "换上备胎!";
        }
    }


    echo "早上起床<br>";


try{

    echo "开车上班<br>";

    //抛出异常
    throw  new MyBtException("车子爆胎了");

    echo "路况很好<br>";

} catch(MyBtException $e) {    //  Exception $e = new Exception('');
    echo $e->getMessage()."<br>";
    //自定义类中的解决方法调用, 解决了问题
    $e->changBt()."<br>";
}

    echo "到公司开始工作<br>";

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 129,369评论 18 137
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,638评论 24 698
  • PHP 学习目录 ├─PHP视频教程 1 LAMP网站构建 │ ├─PHP教程 1.1.1 新版视频形式介绍│ ...
    曹渊说创业阅读 15,585评论 29 418
  • 你还有梦想吗?如果有,你的梦想是什么? 小时候,我们都有大大的梦想:长大要当科学家、要开飞机、要……我小时候的梦想...
    小中医左左阅读 80评论 0 0
  • 在生活中,有些人会因为某些误会从而产生某种见解。今天,我们在晴川书馆里观看了“奇葩说”。这一期的主题是,要...
    林舒蔚阅读 411评论 1 3
  • 嘴在逞强,心在投降,其实我们都在装。 ​​​少年时,我们在远行的路上,中年后,我们一直在回家的路上。 每天一首诗,...
    A分享阅读 1,748评论 4 2
  • 已经卸载parallels desktop可是在快捷方式仍出现windows explorer的图标。能否完全删除...
    _aoj阅读 11,763评论 0 0