自定义的异常类
/* * 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/>";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通