php 的异常处理try catch

来源:互联网 发布:羽戈 知乎 编辑:程序博客网 时间:2024/04/28 02:50

1.异常处理的基本概念:

代码在try代码块内执行,如果出现错误我们可以使用throw关键字抛出一个异常,程序将在catch代码块内捕获异常。


2.异常控制结构:

try{      throw new Exception('我是一个异常',1);}catch(Exception $e) {      echo $e->getCode().':'.$e->getMessage;}


3.Exception类

Exception类是php为了做异常处理提供的内置类

该函数提供的方法为:

getCode(); // 返回传递给构造函数的错误码就是new Exception('我是一个异常',1);传递的第二个参数

getMessage();// 返回传递给构造函数的错误消息就是new Exception('我是一个异常',1);传递的第一个参数

getFile();// 返回产生异常代码文件的全路径

getLine();//  返回代码文件中产生异常的代码行

getTrace();// 返回一个包含产生异常的代码回退路径的数组

getTraceAsString();// 返回一个将getTrace信息格式化为字符串的信息

__toString(); // 这是php的魔术方法当我们直接打印对象的时候回调用这个函数。重要的是exception类中只有着一个方法是可以重载的。

try {        if(!($fp = @fopen('aa.txt','ab')))                throw new Exception('文件打开错误',1);        if(!@flock($fp,LOCK_EX))                throw new Exception('文件锁错误',2);        if(!@fwrite($fp,'aaaa',4))                throw new Exception('文件写入错误',3);}catch(Exception $e) {        echo '错误信息:'.$e->getMessage().'错误码:'.$e->getCode().'错误行:'.$e->getLine().'错误文件:'.$e->getFile();}


4.用户自定义异常

因为__toString()函数是可以重载的,这让我们可以很方便的实现自定义异常

<?phpclass fileOpenException extends Exception {        public function __toString() {                return 'FileOpen:'.$this->getMessage();        }}class fileLockException extends Exception {        public function __toString() {                return 'FileLock:'.$this->getMessage();        }}class fileWriteException extends Exception {        public function __toString() {                return 'FileWrite:'.$this->getMessage();        }}try {        if(!($fp = @fopen('aa.txt','ab')))                throw new fileOpenException('文件打开错误');        if(!@flock($fp,LOCK_EX))                throw new fileLockException('文件锁错误');        if(!@fwrite($fp,'aaaa',4))                throw new fileWriteException('文件写入错误');}catch(Exception $e) {        echo $e;}



通常良好的代码习惯要求:try的代码块代码量较小,并且在带码块结束处捕获异常,这样可以让异常处理代码更容易编写和维护,因为这样可以看到所有处理的代码。