详解PHP异常机制的流程及原理
程序员文章站
2022-06-06 08:10:54
...
PHP的异常机制的原理是什么?在PHP每一个可独立执行的op array最后的ZEND_HANDLE_EXCEPTION是用来干什么呢?让我们从一个问题说起。
对于一下代码,onError明明执行了, 但是onException却没有执行, 为什么呢?
- function onError($errCode, $errMesg, $errFile, $errLine) {
- echo "Error Occurred\n";
- throw new Exception($errMesg);
- }
- function onException($e) {
- echo $e->getMessage();
- }
- set_error_handler("onError");
- set_exception_handler("onException");
- /* 我从不会以我的名字命名文件, 所以这个文件不存在 */
- require("laruence.php");
运行结果:
- Error Occurred
- PHP Fatal error: main(): Failed opening required 'laruence.php
首先, 我们要知道, Require在包含一个找不到的问题的时候, 会前后抛出俩个错误:
1. WARNING : 在PHP试图打开这个文件的时候抛出。
2. E_COMPILE_ERROR : 从PHP打开文件的函数返回失败以后抛出。
而我们知道, set_error_handler是不能捕获E_COMPILE_ERROR错误的。所以, 在onError中, 只能捕获到第一个WARNING错误, 而在onError中抛出的异常, 为什么没有被默认exception_handler捕获呢?这就要说说PHP
1 2 3 下一页