/** * Class show * 一个catch接收抛出异常 */ class show { // 错误的演示 //try { //require ('test_try_catch.php'); //} catch (Exception $e) { //echo $e->getMessage(); //} function try_catch() { /** * try catch 演示 * Exception 异常类 * throw php函数 抛出 * throw new Exception('文件未找到'); * new Exception('可以定义自己想要的抛出异常') * 每一个try一定要有至少一个对应的catch * 抛出一个异常实例化的异常对象 catch接收 * */ // 正确的抛出异常 try { if (file_exists('test_try_catch.php')) { require ('test_try_catch.php'); } else { throw new Exception('文件未找到'); } } catch (Exception $e) { return $e->getMessage(); } } } // //$show = new show; //echo $show->try_catch();
--------------------------------------------------------------------2-----------------------------------------------------------------------------------
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); //有异常产生,这个对象没有创建成功