PHP 5 添加了类似于其它语言的异常处理模块。在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。【以上内容抄的php手册】
一个基本例子:
try{ //可能出现错误或异常的代码 $a = 0; if($a < 2){ throw new Exception("喂,你干啥呢,搞错了啊"); } echo '我在try里'; } catch(Exception $e){ //catch 捕获 Exception是php已定义好的异常类 //对异常处理,方法:1、自己处理 2、不处理,将其再次抛出 echo $e->getMessage(); echo '<br/>我在catch里'; } echo '<hr/>'; echo 100000;
通过这个例子我们能看出以下几个特点:
1.如果try内的代码没有问题 则把try内的代码执行完后直接执行catch后面的代码
2.如果try中代码有异常发生,则抛出一个异常对象,由catch中的参数接收,try中的代码不在执行,直接跳转去catch中的代码,catch执行完,继续向下执行
**自定义异常类**
自定义异常类的特点:
1.自定义异常类必须是Exception的子类
2.Exception 中只有构造方法和toString()方法可以重写
自定义异常类的目的:自定义异常类的目的是在该类中解决异常问题
再来个例子:
//自定义异常类 class MyException extends Exception { public function changeToOne(){ return 1; } public function changeTpFive() { return 5; } } function compare($a) { if($a < 2){ throw new MyException("小样,小了吧"); } } try{ $a = 0; compare($a); }catch (MyException $e){ echo $e->getMessage(); echo '<hr/>'; $a = $e->changeToOne(); try{ compare($a); }catch (MyException $ee){ echo $ee->getMessage(); $a = $e->changeTpFive(); } } echo '<hr/>'; echo $a;