萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP 錯誤捕捉處理 Exception

PHP 錯誤捕捉處理 Exception

PHP 錯誤捕捉處理 Exception

例外是用來改變的正常流通腳本,如果出現錯誤指定



什麼是異常
在PHP 5中來到一個新的面向對象的方式處理錯誤。

異常處理是用來改變正常流通的執行代碼,如果某一特定的錯誤(例外)條件發生。這個條件是所謂的一個例外。

這就是通常當一個例外是觸發:

目前的代碼保存狀況
該代碼執行將切換到預先確定的(自訂)例外處理函數
根據不同的情況下,處理程序就可以恢復執行的代碼保存狀態,終止腳本執行或繼續腳本從一個不同的位置中的代碼
我們將表現出不同的錯誤處理方法:

基本使用例外
創建自定義異常處理
多例外
再扔一個例外
設置頂層異常處理
注:例外只應該用於錯誤條件,不應該被用來跳轉到另一地點的代碼在指定點。



基本使用的例外
當一個異常,下面的代碼將無法執行, PHP將試圖找到匹配的“ catch ”塊。

如果一個例外是沒有抓住,一個致命的錯誤將印發了“ Uncaught異常”的消息。

可以嘗試拋出一個例外沒有趕上它:

<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }

//trigger exception
checkNum(2);
?>

以上代碼將得到一個錯誤這樣的:

 

Fatal error: Uncaught exception 'Exception' 
with message 'Value must be 1 or below' in C:webfoldertest.php:6 
Stack trace: #0 C:webfoldertest.php(12): 
checkNum(28) #1 {main} thrown in C:webfoldertest.php on line 6
Try, throw and catch
 
為了避免錯誤從上面的例子中,我們必須創造適當的代碼來處理一個例外。 

適當的異常代碼應包括以下內容:

嘗試-函數使用一個例外應在“嘗試”區塊。如果例外不會觸發,代碼將繼續正常。但是,如果觸發的例外,一個例外是“扔”
扔掉-這是你如何觸發一個例外。每一個“扔”必須至少有一個“迎頭趕上”
抓住-這是一種“ c atch”塊撷取一個例外,並創建一個對象含有異常信息
可以嘗試觸發一個例外有效的代碼:
 
<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }

//trigger exception in a "try" block
try
 {
 checkNum(2);
 //If the exception is thrown, this text will not be shown
 echo 'If you see this, the number is 1 or below';
 }

//catch exception
catch(Exception $e)
 {
 echo 'Message: ' .$e->getMessage();
 }
?>
 

以上代碼將得到一個錯誤這樣的:

 

Message: Value must be 1 or below
 

為例解釋說:
上述的程式碼罰球一個例外,捕獲它:

該checkNum ( )函數創建。它會檢查,如果數大於1 。如果是這樣,一個異常
該checkNum ( )函數被稱為一個“嘗試”塊
唯一的例外內checkNum ( )函數拋出
在“ catch ”塊retrives例外,並創建一個對象(英文)載有異常信息
錯誤訊息的例外是呼應呼吁$電子商務“ getMessage ( )從物體的例外
然而,有一個方式,這裡的“每一個扔必須有一個追趕”的規則是設定一個最高水平異常處理程序來處理錯誤的漏網之魚。


-------------------------------------------------- ------------------------------

創建自定義異常處理類
創建自定義異常處理程序相當簡單。我們只是創建一個特殊階層的功能,可以說是一個例外時,發生在PHP 。

類必須有一個延伸的例外類。

自定義異常處理類繼承的財產從PHP的異常處理類,你可以添加自定義它的職能。

讓我們創造一個例外類別:

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
  .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
  return $errorMsg;
  }
 }
$email = "[email protected]";
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 }
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

 

新的類別是一份舊的例外類的增加errorMessage ( )函數。由於這是一份舊的階級,它繼承了屬性和方法從舊的階級,我們可以使用一流的方法除了像返回發生異常( )和getFile ( )和getMessage ( ) 。

為例解釋說:
上述的程式碼罰球一個例外,它捕獲了自定義異常類:

該customException ( )創建一流的延伸舊的例外類。這樣,它繼承了所有方法和屬性從舊的例外類
該errorMessage ( )函數創建。此函數返回一個錯誤信息,如果e - mail地址是無效的
美元的電子郵件變量設置為一個字符串,不是一個有效的e - mail地址
的“嘗試”阻止執行和異常以來, e - mail地址是無效的
在“ catch ”塊漁獲量的例外,並顯示錯誤訊息

-------------------------------------------------- ------------------------------

多例外
這是可能的腳本來使用多個例外來檢查多個條件。

可以使用一些如..其他區塊,一個開關,或巢多個例外。這些例外可以使用不同的例外班級和返回不同的錯誤信息:

 

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "[email protected]";

try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
  {
  throw new Exception("$email is an example e-mail");
  }
 }

catch (customException $e)
 {
 echo $e->errorMessage();
 }
catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>
 

為例解釋說:
以上代碼測試兩個條件和罰球一個例外,如果任何條件沒有得到滿足:

該customException ( )創建一流的延伸舊的例外類。這樣,它繼承了所有方法和屬性從舊的例外類
該errorMessage ( )函數創建。此函數返回一個錯誤信息,如果e - mail地址是無效的
美元的電子郵件變量設置為一個字符串,是一個有效的e - mail地址,但包含字符串“榜樣”
的“嘗試”阻止執行和一個例外是不扔的首要條件
第二個條件觸發一個例外,因為電子郵件包含字符串“榜樣”
在“ catch ”塊漁獲量的例外,並顯示正確的錯誤訊息
如果沒有customException追趕,只有例外的基礎副漁獲物,除將處理有


-------------------------------------------------- ------------------------------

再扔例外
有時,當一個異常,你不妨來處理它不同於標准的方式。這是有可能拋出一個例外,第二次在“ catch ”塊。

應的腳本系統錯誤隱藏用戶。系統錯誤可能是重要的編碼器,但不感興趣的用戶。為了讓您方便的用戶可以重新擲的例外與用戶友好的訊息:

 

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
  return $errorMsg;
  }
 }
$email = "[email protected]";
try
 {
 try
  {
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
   {
   //throw exception if email is not valid
   throw new Exception($email);
   }
  }
 catch(Exception $e)
  {
  //re-throw exception
  throw new customException($email);
  }
 }
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>
 

為例解釋說:
以上代碼的測試,如果電子郵件地址包含字符串“榜樣”中,如果這樣做,除了重新拋出:

該customException ( )創建一流的延伸舊的例外類。這樣,它繼承了所有方法和屬性從舊的例外類
該errorMessage ( )函數創建。此函數返回一個錯誤信息,如果e - mail地址是無效的
美元的電子郵件變量設置為一個字符串,是一個有效的e - mail地址,但包含字符串“榜樣”
的“嘗試”塊包含了一個“嘗試”塊,使其能夠重新拋除
唯一的例外是引發自電子郵件包含字符串“榜樣”
在“ catch ”塊漁獲量的例外和再拋出一個“ customException ”
該“ customException ”是捕獲和顯示錯誤訊息
如果例外的是沒有抓住目前的“嘗試”區塊,它將尋求一個catch塊的“更高水平” 。


-------------------------------------------------- ------------------------------

設置頂層異常處理
該set_exception_handler ( )函數設置一個用戶定義的函數來處理所有uncaught例外。

 

<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
 
輸出如下.
 
Exception: Uncaught Exception occurred
在以上代碼不存在“ catch ”塊。相反,高層引發例外處理。此功能應該用來捕獲uncaught例外。 





規則的例外
代碼可能是包圍在try塊,以幫助追趕潛力例外
每一個try塊或“扔”必須至少有一個與之對應的catch
多個catch可以用來捕獲不同的類的例外
例外可以扔(或重新拋出)在catch塊在一個try塊
一個簡單的規則:如果你扔東西,你必須趕上它。
copyright © 萬盛學電腦網 all rights reserved