三 、 Exception 異常的回調(diào)函數(shù)
set_exception_handler(callback functionName) //發(fā)生 Exception 或其 子類的 異常是會(huì)調(diào)用此函數(shù)
function exceptionHandlerFun($errObj){ // Exception 異常的回調(diào)函數(shù) 只有一個(gè)參數(shù),就是拋出的異常對(duì)象。
//.......
}
Exception 異常的回調(diào)函數(shù)并不能像 set_error_handler 的回調(diào)函數(shù)那樣通過(guò)返回 true 來(lái)使異常被消除,即使回調(diào)函數(shù)處理了異常,后繼代碼也不會(huì)被繼續(xù)執(zhí)行,因此想繼續(xù)執(zhí)行后續(xù)代碼必須使用 try-catch。
但是有一個(gè)例外:腳本結(jié)束回調(diào)函數(shù)可以被執(zhí)行,拋出的異常即使沒有被處理,該回調(diào)函數(shù)也是能被執(zhí)行的。
register_shutdown_function(callback functionName[,argument1,argument2,...]);
例如:
function shutdownfunction(){
echo 'script is end';
}
register_shutdown_function("shutdownfunction");
因?yàn)?nbsp;shutdownfunction() 在腳本結(jié)束時(shí)被執(zhí)行,所以 這個(gè)回調(diào)函數(shù)之內(nèi)可以調(diào)用腳本中任意位置的函數(shù),即使該函數(shù)定義在 錯(cuò)誤拋出位置之后(函數(shù)定義是在 腳本編譯期完成的)。
四、trigger_error(string errorMsg[,int user_error_type])
該函數(shù)用于主動(dòng)觸發(fā)一個(gè)錯(cuò)誤: user_error_type 只能是 E_ALL、E_USER_ERROR、 E_USER_WARNING、 E_USER_NOTICE 或其組合的值。
set_error_handler(callbeck functionName[,user_error_type]); // 為 trigger_error() 設(shè)置一個(gè)回調(diào)函數(shù)來(lái)處理錯(cuò)誤,包括系統(tǒng)拋出的錯(cuò)誤和用戶使用 trigger_error() 函數(shù)觸發(fā)的錯(cuò)誤。
可選參數(shù) user_error_type :
如果設(shè)定此參數(shù),則 trigger_error 拋出的錯(cuò)誤類型符合 在user_error_type 的定義范圍才能觸發(fā)回調(diào)函數(shù)。
這個(gè)值的設(shè)置類似于 error_reporting() 函數(shù) 。
第一個(gè)參數(shù)(callbeck functionName):
一個(gè)函數(shù)名,該函數(shù) 可以有 5 個(gè)參數(shù),其中前 2 個(gè)必選,依次是:
trigger_error 拋出的 user_error_type、trigger_error 拋出的 errorMsg、拋出錯(cuò)誤的文件的絕對(duì)路勁、拋出錯(cuò)誤的行號(hào)、拋出錯(cuò)誤時(shí)的上下文環(huán)境 (一個(gè)數(shù)組,包含了trigger_error() 所在作用域內(nèi)的所有變量、函數(shù)、類等數(shù)據(jù) )
回調(diào)函數(shù)的返回值: 如果返回 false ,系統(tǒng)錯(cuò)誤處理機(jī)制仍然繼續(xù)拋出該錯(cuò)誤,返回 true 或 無(wú)返回值 則消除錯(cuò)誤。
trigger_error() 觸發(fā)的錯(cuò)誤不會(huì)被 try-catch 異常捕獲語(yǔ)句捕獲。
本文導(dǎo)航
- 第1頁(yè): 首頁(yè)
- 第2頁(yè): try-catch
- 第3頁(yè): Exception 異常的回調(diào)函數(shù)