PHP異常與錯誤處理機制


先區別一下php中錯誤 與 異常的概念吧

PHP錯誤:是屬於php程序自身的問題,一般是由非法的語法,環境問題導致的,使得編譯器無法通過檢查,甚至無法運行的情況。平時遇到的warming、notice都是錯誤,只是級別不同而已。

PHP異常:一般是業務邏輯上出現的不合預期、與正常流程不同的狀況,不是語法錯誤。

PHP異常處理機制借鑒了java  c++等,但是PHP的異常處理機制是不健全的。異常處理機制目的是將 程序正常執行的代碼  與 出現異常如何處理的代碼分離。

PHP是無法自動捕獲異常的(絕大多數),只有主動拋出異常並捕捉。也就是說,對於異常,是可預見的。

以除數為0為例,看看PHP是如何處理的

<?php 
$a = 0;
try {
	echo 4/$a;
}
catch (Exception $e){
	echo $e->getMessage();
}
//報錯,PHP是無法自動捕獲異常的,必須手動拋出
?>

  下面手動拋出

<?php 
$a = 0;
try {
	if($a == 0){
		throw new Exception('除數不能為0', 1);
	}
	echo 4/$a;//不會執行
}
catch (Exception $e){
	echo $e->getMessage();
}
?>

  可以看到,catch捕獲到了異常。

PHP中對於異常的機制使用,一般用於業務邏輯判斷上面,當業務邏輯不正常時,進行特殊處理。

下面看一下PHP錯誤處理機制。PHP提供了set_error_handler()函數進行錯誤處理。當錯誤發生時,set_error_handler會統一處理錯誤。

如下所示

<?php 
$a = 0;
function handle($errno,$errstr,$errfile,$errline){
	echo $errfile;
}
set_error_handler('handle');

echo 4/$a;
echo PHP_EOL;
echo 'hehe';
?>

  上面的

echo 4/$a;發生了錯誤,此時進入了錯誤處理函數handle中,進行錯誤處理,一般我們在handle中加入die,終止執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM