12. php的错误和异常处理(二)
来源:互联网 发布:伊登软件股份有限公司 编辑:程序博客网 时间:2024/06/03 18:51
1. 异常处理实现
通过以下语句实现:
<?phptry{ //所有需要进行异常处理的代码都必须放入这个代码块内 ... ... //这里可以使用throw语句跑出一个异常对象}catch(ex1){ //使用该代码块捕获一个异常,并处理 ... ... //处理发生的异常,也可再次抛出异常}
在PHP代码中所产生的异常可以被throw语句抛出并被catch语句捕获。需要进行异常处理的代码都必须放入try代码内,以便捕获可能存在的异常。每一个try至少要有一个与之对应的catch,也不可能出现单独的catch。例如:
<?phptry{ $error = 'Always throw this error'; throw new Exception($error); //创建一个异常对象,通过throw语句抛出 echo '不执行'; //从这里开始,try代码内的代码将不会再被执行} catch(Exception $e){ echo ' 错误信息:',$e->getMessage(),"</br>";//输出捕获的异常消息}echo "Hello World"; //程序没有崩溃继续向下执行
在PHP中,异常必须手动抛出。throw关键字将触发异常处理机制,它是一个语言结构,而不是一个函数,但必须给它传递一个对象作为值。如果在try语句中有一场对象被抛出,该代码块不会再继续向下执行,而直接跳转到catch中执行。在catch代码块中可以简单地输出一些异常的原因。在异常处理之后,程序不会崩溃会继续执行。
2. 扩展PHP内置的异常处理类
异常处理类Exception的结构,它并不是一段有实际意义的可用代码。
<?phpclass 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()信息 /** * 重载方法 * @return {[type]} [description] */ function __toString(){} //可输出的字符串}
如果使用自定义的类作为异常处理类,则必须是扩展内置异常处理类Exception的子类,非Exception类的子类是不能作为异常处理使用的。注意使用parent::construct()来检查所有的变量是否已经被赋值
例如:custom_error.php
<?php/** * Description: 自定义的一个异常处理类,但必须是扩展内异常处理的子类 * Version: 1.1 * Author: Chang * Date: 2016/05/23 * Time: 17:39 */class MyException extends Exception{ /** * 重定义构造方法使用第一个参数message变为必须指定的属性 * @param [type] $message [description] * @param integer $code [description] */ public function __construct($message, $code = 0){ //可以在这里定义自己的代码 //建议同时调用parent::construct()来检查所有的变量是否已经被赋值 parent::__construct($message, $code); } /** * 重写父方法,自定义字符串输出的样式 * @return string [description] */ public function __toString(){ return __CLASS__.":[".$this->code."]".$this->message."<br/>"; } /** * 为这个异常自定义一个处理方法 * @return [type] [description] */ public function customFunction(){ echo "按自定义的方法处理出现的这个类型的异常</br>"; }}try{//使用自定义的异常类捕获一个异常,并处理异常 $error = '允许抛出这个错误'; throw new MyException($error); //创建一个自定义的异常类对象,通过throw语句抛出 echo "不会被执行";}catch(MyException $e){ echo '捕获异常:'.$e; //输出捕获的异常消息 $e->customFunction(); //通过自定义的异常对象中的方法处理异常}echo '你好啊';
3. 捕获多个异常
在try代码块之后,必须至少给出一个catch代码块,也可以将多个catch代码块与一个try代码块进行关联。如果有多个catch代码块,传递给每一个catch代码块的对象必须具有不同的类型。PHP可以自动找到对应类型的catch块。如果都没有匹配到,则跳转到最有一个catch的后面继续执行。例如:
<?php/** * Description: 捕获多个异常 * Version: 1.1 * Author: Chang * Date: 2016/05/23 * Time: 17:58 */include './custom_error.php'; 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 Exception("传入的值'2'不允许作为一个参数", 6); break; default: //传入参数合法,则不抛出异常 $this->var = $value; //为对象成员属性赋值 break; } } } try{ $testObj = new TestException(); //使用默认的参数创建异常的测试类对象 echo "*****<br>"; //没有异常,正常执行 }catch(MyException $e){ echo "捕获自定义的异常:$e <br/>"; $e->customFunction(); }catch(Exception $e){ echo "默认捕获的异常:".$e->getMessage()."<br/>"; }var_dump($testObj); //判断对象是否创建成功,如果没有任何异常,则创建成功 try{ $testObj1 = new TestException(1); //传入1时,抛出自定义异常 echo "*****<br>"; //不被执行 }catch(MyException $e){ echo "捕获自定义的异常:$e <br/>"; $e->customFunction(); }catch(Exception $e){ //这个catch区块不被执行 echo "默认捕获的异常:".$e->getMessage()."<br/>"; }var_dump($testObj1); //有异常产生,这个对象没有创建成功 try{ $testObj2 = new TestException(2); //传入2时,抛出内置异常 echo "*****<br>"; //不被执行 }catch(MyException $e){ //这个catch区块不被执行 echo "捕获自定义的异常:$e <br/>"; $e->customFunction(); }catch(Exception $e){ echo "默认捕获的异常:".$e->getMessage()."<br/>"; }var_dump($testObj2); //有异常产生,这个对象没有创建成功
0 0
- 12. php的错误和异常处理(二)
- php的错误处理和异常处理
- php中错误和异常处理的机制二(错误处理器和错误触发器)
- 【异常和错误】PHP的异常和错误处理【原创】
- PHP 的错误和异常处理
- php的错误和异常处理
- PHP的错误和异常处理
- PHP的错误和异常处理总结
- PHP 错误和异常处理
- php异常和错误处理
- PHP错误和异常处理
- php异常和错误处理
- php的错误与异常处理(二)
- php中错误和异常处理的机制一
- 11. php的错误和异常处理(一)
- php设定错误和异常处理可使用的函数
- PHP中文件简单错误和异常处理的机制
- PHP中的错误和异常处理
- [SDIBT-OJ]28页
- 解析数据时,碰见不想要的内容,想筛掉
- Corel-1000 dataset Wang 数据集
- OpenGL Buffer 操作合集
- 从零开始学习C语言
- 12. php的错误和异常处理(二)
- Maven pom.xml “Plugin execution not covered by lifecycle configuration”
- leetcode 258 Add Digits
- 广义表的读取和输出,树的拷贝及比较的实现
- Spark中组件Mllib的学习15之创建分布式矩阵
- currentTimeMillis方法
- python中的*与**
- C语言项目开发-项目架构和编程命名规范
- CVonline: Image Databases 计算机视觉图像数据集