/** 1.自定义的异常类,必须是系统类Exception的子类* 如果继承Exception类,重写了构造方法,一定要调用一下父类的构造方法。*/class MyException extends Exception{//必须继承Exception类function __construct($mess){parent::__construct($mess);}function change(){//自定义方法echo '换上备胎';}}
echo "早上起床<br/>";$flag = true;//根据异常情况设置标志位来抛出异常try{echo "开车上班<br/>";if($flag){//抛出异常throw new MyException("车子爆胎");}echo "路况很好<br/>";
}catch(MyException $e){//$e = new Exception();echo $e->getMessage()."<br/>";echo $e->change()."<br/>";//调用自定义类的方法echo "换上备胎,继续开车上班<br/>";
}echo "到公司<br/>";
============================================================================
/** 捕获多个异常catch*/class WcException extends Exception{function methodWc(){echo "去公厕";}}class NoeatException extends Exception{function  methodEat(){echo "买个面包";}     }class NutException extends Exception{function  methodGowork(){echo "换个轮胎";}}class SnowException extends Exception{function  methodHighway(){echo "走小路";}}class Badday{function gowc($flag){if(!$flag){throw new WcException("马桶坏了");}echo "物质准备到位<br/>";}function eat($time){if(!$time){throw new NoeatException("无早餐可吃");}echo "吃很饱<br/>";}function gowork($nut){if(!$nut){throw new NutException("扎到钉子了");}echo "去上班啦!<br/>";}function highway($snow){if(!$snow){throw new SnowException("下雪封路了");}echo "走高速<br/>";}}
echo "早上起床<br/>";$flag = false;//根据异常情况设置标志位来抛出异常try{$badday = new Badday();//1.上厕所(马桶不好用了) 去公厕$badday->gowc(true);//2.吃早餐(没有早点了) 买个面包$badday->eat(false);//3.开车上班(爆胎)  换胎$badday->gowork(true);//4.上高速(下雪了) 走国道$badday->highway(true);
}catch(WcException $e){echo $e->methodWc();
}catch (NoeatException $e){echo $e->methodEat();
}catch(NutException $e){echo $e->methodGowork();
}catch(SnowException $e){echo $e->methodHighway();
}catch (Exception $e){echo $e->getMessage();
}echo "到公司<br/>";