深入理解PHP原理的异常机制

深入理解PHP原理的异常机制
PHP异常机制的原理是什么
每一个独立运算阵列,可以运行在PHP上zend_handle_exception是什么
让我们从一个问题开始。上周,blue5tar提了一个问题:对于下面的代码,执行OnError显然是例外,但没有执行它。为什么
复制代码代码如下所示:
< PHP
函数的误差(errcode美元,errmesg美元美元美元,errfile,errline){
发生错误
抛出异常($ errmesg);
}
函数例外(e){
echo $ E -> GetMessage();
}
set_error_handler(错误);
set_exception_handler(例外);
我不会把文件命名到我的名字,这样文件就不存在了。
要求(laruence .php);

运行结果:
复制代码代码如下所示:
发生错误
php错误主要():没有开放required' laruence.php

首先,我们需要知道,当需求包含一个找不到的问题时,它会抛出两个错误。
复制代码代码如下所示:
警告:当PHP试图打开此文件时,它将被抛出。
e_compile_error:一个函数,打开一个文件从PHP返回失败后

我们知道,set_error_handler无法捕捉的e_compile_error错误:
下列错误类型不能用用户定义的A、a
所以,在OnError,第一次警告错误只能被抓获,关进OnError例外不是默认的exception_handler捕获。
这是说PHP的异常机制。
这是我们大家都知道的,就是理解原理PHP操作码。在PHP5.3,运算阵列的每一操作码(文件、函数、方法)可以独立运行,什么是操作码用来做什么
原来,在PHP中,当异常抛出,你跳到每一个运算阵列执行zend_handle_exception的最后一行,这是如下:
复制代码代码如下所示:
无效on_throw_exception(zval异常tsrmls_dc){
1。判断是否异常抛出
2。记录异常
三.记录下一个要执行的OP行的序列号。
4。要执行的下一个OP行序列号=当前运算阵列的最后一个
}

嗯,就像重写IP登记,重写下OP线序号执行会改变程序的流动方向,使其进入zend_handle_exception处理逻辑。
在zend_handle_exception,它将确定异常是在尝试抓住,
复制代码代码如下所示:
如果是,则要执行的下一个OP行被设置为第一catch的OP行并继续执行。
如果你不摧毁一些变量,你不需要,和opline,然后完成直接。

一些学生想问:什么时候set_exception_handler设置异常处理功能(默认user_exception_handler)工作
好的,它是默认的异常处理程序,判断在完成退出循环之后是否有默认的异常处理函数,如果有调用的话:
复制代码代码如下所示:
实现
zend_execute(如(active_op_array)tsrmls_cc);
如果(例如(例外)){
如果(如(user_exception_handler)){
调用用户定义的默认异常处理函数
{人}
未捕获的异常
}
{人}
无异常
}
destroy_op_array(如(active_op_array)tsrmls_cc);
饱和(如(active_op_array));

PHP的异常流量

注:在图是不严谨的,这是一点,当最后一个catch块是确定的,它将在同一时间确定(is_a),如果它是进入最后一个catch块。
PHP将直接zend_bailout遇到致命错误时,和zend_bailout将导致程序流程跳过上面的代码片段,或者可以解释为直接出口(longjmp),导致user_exception_handler没有机会采取行动。
知道这一点,我认为文章开头的问题很清楚。
最后,在zend_handle_exception,学生可能会有疑问:如果是这样,为什么运算阵列zend_handle_exception每个独立的执行终于有了最简单的,如果一个函数不抛出,然后操作码显然是不需要啊,嘿,你很聪明,PHP 5.3,根据自己的想法去适应。在把唯一的一次,将动态生成的zend_handle_exception opline。
PHP5的更新日志:
更改异常处理。现在每个op_array不含zend_handle_exception码在
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部