欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

PHP異常機制的流程及原理

本篇內(nèi)容介紹了“PHP異常機制的流程及原理”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊及專業(yè)的網(wǎng)站設(shè)計師團(tuán)隊。

PHP的異常機制的原理是什么?在PHP每一個可獨立執(zhí)行的op array***的ZEND_HANDLE_EXCEPTION是用來干什么呢?讓我們從一個問題說起。

對于一下代碼,onError明明執(zhí)行了, 但是onException卻沒有執(zhí)行, 為什么呢?

<?php 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");

運行結(jié)果:

Error Occurred  PHP Fatal error: main(): Failed opening required 'laruence.php

首先, 我們要知道, Require在包含一個找不到的問題的時候, 會前后拋出倆個錯誤:

1. WARNING : 在PHP試圖打開這個文件的時候拋出。

2. E_COMPILE_ERROR : 從PHP打開文件的函數(shù)返回失敗以后拋出。

而我們知道, set_error_handler是不能捕獲E_COMPILE_ERROR錯誤的。所以, 在onError中, 只能捕獲到***個WARNING錯誤, 而在onError中拋出的異常, 為什么沒有被默認(rèn)exception_handler捕獲呢?這就要說說PHP的異常機制了.

了解opcode的同學(xué)都知道, 在PHP5.3以前, 每一個可獨立運行的op array(文件, 函數(shù), 方法)的***一條opcode都是ZEND_HANDLE_EXCEPTION, 而這個opcode是做什么用的呢?

原來在PHP中, 當(dāng)有異常被throw的時候, 會跳到每一個op array的***一行, 來執(zhí)行這條ZEND_HANDLE_EXCEPTION, 偽碼如下:

void on_throw_exception(zval *exception TSRMLS_DC) {  1. 判斷是否已經(jīng)有異常拋出  2. 記錄exception  3. 記錄下一條要執(zhí)行的op line的序號  4. 下一條要執(zhí)行的op line序號 = 當(dāng)前op array的***一條  }

就和改寫ip寄存器一樣, 改寫下一條要執(zhí)行的op line的序號, 就改變了程序的流向, 這樣, 就會進(jìn)入到了ZEND_HANDLE_EXCEPTION的處理邏輯中.而在ZEND_HANDLE_EXCEPTION中, 會判斷這個異常是否在try catch中。

◆如果是,則把下一條要執(zhí)行的op line, 置為***個catch的op line, 并繼續(xù)執(zhí)行。

◆如果不是,則銷毀一些不需要的變量, 和opline, 然后直接結(jié)束執(zhí)行過程。

這里有的同學(xué)要問了:”那set_exception_handler設(shè)置的異常默認(rèn)處理函數(shù)(user_exception_handler)什么時候起作用呢?” 是在執(zhí)行完成退出執(zhí)行LOOP以后才判斷是否有默認(rèn)異常處理函數(shù), 如果有才調(diào)用:

//執(zhí)行  zend_execute(EG(active_op_array) TSRMLS_CC);  if (EG(exception)) {          if (EG(user_exception_handler)) {                   調(diào)用用戶定義的默認(rèn)異常處理函數(shù)           }       else {                   未捕獲的異常           }  }   else {       沒有異常        }  destroy_op_array(EG(active_op_array) TSRMLS_CC);  efree(EG(active_op_array));

PHP異常流程

PHP異常機制的流程及原理

注: 圖中有一處不嚴(yán)謹(jǐn), 即在確定是否***一個catch塊的時候, 會同時判斷(is_a), 如果是才進(jìn)入***一個catch塊執(zhí)行。

而PHP在遇到Fatal Error的時候, 會直接zend_bailout, 而zend_bailout會導(dǎo)致程序流程直接跳過上面代碼段, 也可以理解為直接exit了(longjmp), 這就導(dǎo)致了user_exception_handler沒有機會發(fā)生作用。了解到這些, 我想文章開頭的問題的為什么? 也就很清晰了吧?

***, 關(guān)于ZEND_HANDLE_EXCEPTION, 也許有同學(xué)會有疑問: 如果是這樣, 那為什么每一個可獨立執(zhí)行的op array***都有這個ZEND_HANDLE_EXCEPTION呢? 最簡單的, 如果一個函數(shù)中不會throw, 那么這個opcode是明顯不需要的? 你很聰明, PHP 5.3開始, 已經(jīng)按照你的想法調(diào)整了。只有在throw時刻, 才會動態(tài)的生成ZEND_HANDLE_EXCEPTION opline.

“PHP異常機制的流程及原理”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

網(wǎng)頁標(biāo)題:PHP異常機制的流程及原理
文章路徑:http://aaarwkj.com/article26/iipicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、App設(shè)計微信公眾號、靜態(tài)網(wǎng)站、網(wǎng)站改版、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
国产成人精品久久性色av| 日本精品av免费观看| 亚洲午夜天堂精品福利天堂| 日韩av网址在线免费观看| 亚洲国产成人精品女人| 久久亚洲第一视频网站| 亚洲欧美日韩专区一区| 国产一区二区三区精品女同| 亚洲字幕中文在线乱码mv| 日韩中文字幕一二一二区| 宅男午夜一区二区三区| 伊人久久大香线蕉av网站| av剧情在线观看免费| 亚洲福利视频在线观看免费| av剧情网址在线观看| 国产精品呦呦国产精品尤物| 日韩在线国产精品视频| 99国产精品的热久久| 加藤桃香中文字幕在线| 五月婷婷丁香六月在线综合| 欧美精品日韩精品一区二区| 三级黄色片免费久久久| 91桃色午夜福利视频| 日韩不卡一区二区在线观看| 国产熟女乱免费一区二区| 日本韩国欧美成人精品| 国产亚洲欧美日韩看国产| 99热这里66只有精品| 日本免费一区二区三区视频观看| 人妻在线中文字幕一区| 一区二区不卡日韩av| 国语av一区二区三区| 日本亚洲欧美男人的天堂| 久久av免费一区二区观看| 小仙女精品经典三级永久| 免费黄色福利网址大片| 国产日韩欧美高清免费视频| 成人亚洲精品一区二区三区| 国产中文字二暮区2021综合| 亚洲熟妇精品一区二区三区| 国产三级三级三级av精品|