try...catch...语法

语法一定要简练,最重要的是功能说明和使用案例!如下:

1、它是PHP5添加的类似于其它语言的异常处理模块;

2、需要进行异常处理的代码都必须放入 try 代码块内,由 Exception $e 收集错误信息,CATCH块中,使用 $e 显示和处理错误信息;

3、尽管你的代码有bug,但你想让它继续执行而不报错,就可以用 try...catch... 自己进行异常处理。

4、上面基本就够用了,还不懂,请往下看个小实例:

复制代码代码如下:
<?php
try {
$mgr = new CommandManager(); 
$cmd = $mgr->getCommandObject("realcommand");    //有错误的方法
$cmd->execute();
} catch (Exception $e) {
print $e->getMessage();
exit();
}
?>

想精通该语法,请往下继续看实例:

复制代码代码如下:
<?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 "按自定义的方法处理出现的这个类型的异常";
           }
    }
 
    //创建一个用于测试自定义扩展的异常类MyException
    class TestException{
        public $var;           //用来判断对象是否创建成功的成员属性
        function __construct($value=0){              //通过构造方法的传值决定抛出的异常
            switch($value){                          //对传入的值进行选择性的判断
                case 1:                              //掺入参数1,则抛出自定义的异常对象
                    throw new MyException("传入的值“1”是一个无效的参数",5);break;
                case 2:                              //传入参数2,则抛出PHP内置的异常对象
                    throw new MyException("传入的值“2”不允许作为一个参数",6);break;
                default:                             //传入参数合法,则不抛出异常
                    $this->var=$value;break;          //为对象中的成员属性赋值
            }
        }
    }
 
    //示例1,在没有异常时,程序正常执行,try中的代码全部执行并不会执行任何catch区块
    try{
        $testObj =new TestException();           //使用默认参数创建异常的擦拭类对象
        echo "********<br>";                     //没有抛出异常这条语句就会正常执行
    }catch(MyException $e){                      //捕获用户自定义的异常区块
        echo "捕获自定义的异常:$e<br>";          //按自定义的方式输出异常消息
        $e->customFunction();                    //可以调用自定义的异常处理方法
    }catch(Exception $e){                        //捕获PHP内置的异常处理类的对象
        echo "捕获默认的异常:".$e->getMessage()."<br>";       //输出异常消息
    }
    var_dump($testObj);        //判断对象是否创建成功,如果没有任何异常,则创建成功
 
    //示例2,抛出自定义的异常,并通过自定义的异常处理类捕获这个异常并处理
    try{
        $testObj1 =new TestException(1);         //传1时,抛出自定义异常
        echo "********<br>";                     //这个语句不会被执行
    }catch(MyException $e){                      //这个catch区块中的代码将被执行
        echo "捕获自定义的异常:$e<br>";          
        $e->customFunction();                    
    }catch(Exception $e){                        //这个catch区块不会执行
        echo "捕获默认的异常:".$e->getMessage()."<br>";       
    }
    var_dump($testObj1);        //有异常产生,这个对象没有创建成功
 
    //示例2,抛出自内置的异常,并通过自定义的异常处理类捕获这个异常并处理
    try{
        $testObj2 =new TestException(2);         //传入2时,抛出内置异常
        echo "********<br>";                     //这个语句不会被执行
    }catch(MyException $e){                      //这个catch区块中的代码将被执行
        echo "捕获自定义的异常:$e<br>";          
        $e->customFunction();                    
    }catch(Exception $e){                        //这个catch区块不会执行
        echo "捕获默认的异常:".$e->getMessage()."<br>";       
    }
    var_dump($testObj2);        //有异常产生,这个对象没有创建成功
?>

5、实例讲解:

(1)如果抛出了一个异常,try语句中的脚本将会停止执行,然后马上转向执行catch语句中的脚本;

(2)当 try 代码块没有抛出异常,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。

猜你喜欢

转载自blog.csdn.net/weixin_40704661/article/details/80929547