php 異常和錯誤處理機制

php只有手動拋出異常才能捕獲異常php

class emailException extends Exception{
            //定義魔術方法 ,直接輸出對象的信息
	public function __toStirng(){
		$error = "Code:{$this->getCode()},message:{$this->getMessage()} line:{$this->getLine()},file:{$this->getFile()}";
		return $error;
	}
}
function reg($i){
	if($i>0){
		throw new emailException("錯誤");
	}
}

try{	
	reg($i=6);
}catch(emailException $e){
	echo $e;
	echo $e->getMessage();
}catch(Exception $e){
    $e->getMessage();
}
//此處須要注意  exception 做爲超類應該放到最後捕獲
//若是提早捕獲這個超類,後面的捕獲就終止了,並且不提供 針對性的信息處理

 

運行圖函數

自定義 異常處理函數(只能捕獲到異常和非致命的錯誤,致命的錯誤仍是會掛掉)this

function  customError($errno,$errstr,$errfile,$errline){
	
	echo "<b>錯誤代碼</b>[${error}]${errstr}"."</br>";
	echo "錯誤所在代碼行:{$errline}文件{$errfile}"."</br>";
	echo "PHP版本",PHP_VERSION,"(",PHP_OS,")"."</br>";
}

set_error_handler("customError",E_ALL|E_STRICT); 
$a = array('o'=>2,4,6,8);
echo $a[o];  //錯誤的代碼
//set_error_handler()函數會接管php內置的錯誤處理,
//能夠在同一個頁面使用 restore_error_handler()取消接管

 

運行圖:spa

簡單處理fetal error的錯誤rest

class Shutdown{
		
		public function stop(){
			if(error_get_last()){
				print_r(error_get_last());
			}
			die('Stop.');
		}
	}
	register_shutdown_function(array(new Shutdown(),'stop')); 
	//此函數會在php程序終止或者die時觸發一個函數
	$a = new a(); //錯誤代碼
	echo "致命錯誤";

 

運行圖:code

相關文章
相關標籤/搜索