在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
PHP具有很多异常处理类,其中Exception是所有异常处理的基类。 异常使用场景 1、主要处理各种可预见,不可预见的情况,统一返回,没有使用 try...catch 接收的异常直接跳进设置的方法
如果异常出现,没有捕获,异常之前的代码可以继续执行,之后的脚本将不能执行
1、不会捕获语法错误 2、try catch 只能捕获抛出异常 3、父类可以捕获子类抛出的异常 实验一、不同子类是否可以互相捕获 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(); }
执行后抛出上面错误,不同子类不能捕获
实验二、父类是否可以捕获子类异常 <?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(); }
结果显示父类可以捕获子类
实验三、多个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 进行捕获,针对不同异常进行不同处理
实验四、异常嵌套 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 代码块去捕获。
实验五、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');
|
2022-08-18
2022-08-15
2022-08-17
2022-11-06
2022-08-17
请发表评论