Home > Backend Development > PHP Tutorial > 详解PHP异常机制的流程及原理

详解PHP异常机制的流程及原理

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-01 14:24:21
Original
836 people have browsed it

 PHP的异常机制的原理是什么?在PHP每一个可独立执行的op array最后的ZEND_HANDLE_EXCEPTION是用来干什么呢?让我们从一个问题说起。

对于一下代码,onError明明执行了, 但是onException却没有执行, 为什么呢?

<ol class="dp-c">
<li class="alt"><span><span><?php    </span></span></span></li>
<li>
<span class="keyword">function</span><span> onError(</span><span class="vars">$errCode</span><span>, </span><span class="vars">$errMesg</span><span>, </span><span class="vars">$errFile</span><span>, </span><span class="vars">$errLine</span><span>) {     </span>
</li>
<li class="alt">
<span class="func">echo</span><span> </span><span class="string">"Error Occurred\n"</span><span>;     </span>
</li>
<li>
<span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(</span><span class="vars">$errMesg</span><span>);   </span>
</li>
<li class="alt"><span>}    </span></li>
<li>
<span class="keyword">function</span><span> onException(</span><span class="vars">$e</span><span>) {     </span>
</li>
<li class="alt">
<span class="func">echo</span><span> </span><span class="vars">$e</span><span>->getMessage();   </span>
</li>
<li><span>}    </span></li>
<li class="alt">
<span>set_error_handler(</span><span class="string">"onError"</span><span>);    </span>
</li>
<li>
<span>set_exception_handler(</span><span class="string">"onException"</span><span>);    </span>
</li>
<li class="alt">
<span class="comment">/* 我从不会以我的名字命名文件, 所以这个文件不存在 */</span><span>   </span>
</li>
<li>
<span class="keyword">require</span><span>(</span><span class="string">"laruence.php"</span><span>); </span>
</li>
</ol>
Copy after login

运行结果:

<ol class="dp-xml">
<li class="alt"><span><span>Error Occurred    </span></span></li>
<li><span>PHP Fatal error: main(): Failed opening required 'laruence.php </span></li>
</ol>
Copy after login

首先, 我们要知道, Require在包含一个找不到的问题的时候, 会前后抛出俩个错误:

1. WARNING : 在PHP试图打开这个文件的时候抛出。

2. E_COMPILE_ERROR : 从PHP打开文件的函数返回失败以后抛出。

而我们知道, set_error_handler是不能捕获E_COMPILE_ERROR错误的。所以, 在onError中, 只能捕获到第一个WARNING错误, 而在onError中抛出的异常, 为什么没有被默认exception_handler捕获呢?这就要说说PHP

1 2 3  下一页
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template