/*
* 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/>";