Heim >Backend-Entwicklung >PHP-Tutorial >详解PHP异常机制的流程及原理

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-01 14:24:21837Durchsuche

 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>

运行结果:

<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>

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

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

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

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

1 2 3  下一页
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP程序开发的原则汇总Nächster Artikel:Apache中改变php.ini的路径