PHP具备不少异常处理类,其中Exception是全部异常处理的基类。
Exception具备几个基本属性与方法,其中包括了:
message 异常消息内容
code 异常代码
file 抛出异常的文件名
line 抛出异常在该文件的行数
其中经常使用的方法有:
getTrace 获取异常追踪信息
getTraceAsString 获取异常追踪信息的字符串
getMessage 获取出错信息
php
异常使用场景函数
一、主要处理各类可预见,不可预见的状况,统一返回,没有使用 try...catch 接收的异常直接跳进设置的方法.net
2. 但愿业务代码中不充斥一大堆打印调试的处理,就会用异常机制。或者是一些业务上须要定义一些异常。3d
若是异常出现,没有捕获,异常以前的代码能够继续执行,以后的脚本将不能执行调试
一、不会捕获语法错误code
二、try catch 只能捕获抛出异常orm
三、父类能够捕获子类抛出的异常blog
实验1、不一样子类是否能够互相捕获字符串
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try_catch(1); } catch (ExceptionB $e) { $e->getMessage(); }
执行后抛出上面错误,不一样子类不能捕获get
实验2、父类是否能够捕获子类异常
<?php /** * Created by PhpStorm. * User: ganga * Date: 2019/3/9 * Time: 上午10:57 */ class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try_catch(1); } catch (Exception $e) { echo $e->getMessage(); }
结果显示父类能够捕获子类
实验3、多个try catch进行捕获多个不一样异常
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try_catch(2); } catch (ExceptionA $e) { echo $e->getMessage(); } catch (ExceptionB $e) { echo $e->getMessage(); }
显示结果
能够利用多个try catch 进行捕获,针对不一样异常进行不一样处理
实验4、异常嵌套
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } try { try { try_catch(2); } catch (ExceptionA $e) { echo $e->getMessage(); } } catch (ExceptionB $e) { echo $e->getMessage(); }
实验结果证实、
若是在内层 "try" 代码块中异常没有被捕获,则它将在外层级上查找 catch 代码块去捕获。
实验5、set_exception_handler() 能够在定义异常处理器,处理全部未捕获异常的用户定义函数。
class ExceptionA extends Exception { } class ExceptionB extends Exception { } function setException($exception) { echo 'execption:' . $exception->getMessage() . ':' . $exception->getCode(); } function try_catch($type) { switch ($type) { case 1: throw new ExceptionA('a exception'); break; case 2: throw new ExceptionB('b exception'); break; } } set_exception_handler('setException'); throw new Exception('set execption');