PHP5支持Exception模型,例如C ++ / C#和Java。
捕获异常的语法:
try { //可以启动异常的代码 // [...] // 手动异常抛出 throw new Exception(“thrown exception”); //不执行!(抛出命令被捕获在下面 print “not printed!”; } catch(Exception $e) { print $e->getMessage();} this code prints : “thrown exception”. <!--more--> It’s possibile to throw an exception inside a catch construct. The new exception will be caught in the external try-catch block. try { try{ throw new Exception(“internal exception”); } catch (Exception $e) { throw new Exception($e->getMessage()); } print “not printed!”; } catch(Exception $e) { print $e->getMessage(); }
这段代码显示:“内部异常”
“ Exception”内置类的结构和继承
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(); // 格式化的跟踪字符串 /* Overrideable */ function __toString(); // 用于显示的格式化字符串 }
如果是扩展,请记住在扩展类构造函数
parent:中调用超类构造函数:__construct()
多个catch构造
允许在try构造之后指定多个catch。
如果异常与参数不匹配,它将被捕获到下一个catch块。
注意:Exception对象也与其子类的对象匹配。注意顺序!
class MyException extends Exception {/* …*/ } try{ throw new MyException(“”); } catch (MyException $e) {// 打印“ MyException”; } catch (Exception $e) { // 从未执行 print “Exception”; } And … try{ throw new MyException(“”); } catch (Exception2 $e) { print “Exception”; } catch (Exception $e) { // 打印“ Exception”; } catch (MyException $e) { print “MyException”; }