php中異常處理方法小結,php處理方法小結_PHP教程

來源:互聯網
上載者:User

php中異常處理方法小結,php處理方法小結


本文執行個體總結了php中異常處理方法。分享給大家供大家參考。具體分析如下:

當異常被觸發時,通常會發生:在PHP5中添加了類似於其它語言的錯誤異常處理模組。在 PHP代碼中所產生的異常可被 throw語句拋出並被 catch 語句捕獲。需要進行異常處理的代碼都必須放入 try 代碼塊內,以便捕獲可能存在的異常。每一個 try 至少要有一個與之對應的 catch。

使用多個 catch 可以捕獲不同的類所產生的異常,當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉到最後一個 catch 的後面繼續執行。當然,PHP 允許在 catch 代碼塊內再次拋出(throw)異常,當一個異常被拋出時,其後(譯者註:指拋出異常時所在的代碼塊)的代碼將不會繼續執行,而 PHP 就會嘗試尋找第一個能與之匹配的 catch,如果一個異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那麼 PHP 將會產生一個嚴重的錯誤,並且輸出 Uncaught Exception ... (未捕獲異常)的提示資訊.

1、異常類的層級關係,代碼如下:
複製代碼 代碼如下:class NotFoundException extends Exception{}

class InputException extends Exception{}

class DBException extends Exception{}

2、配置未捕捉異常的處理器,代碼如下:
複製代碼 代碼如下:function exception_uncaught_handler(Exception $e) {
header('Content-type:text/html; charset=utf-8');
if ($e instanceof NotFoundException)
exit($e->getMessage());
elseif ($e instanceof DBException)
exit($e->getMessage());
else
exit($e->getMessage());
}
set_exception_handler('exception_uncaught_handler');
3、在資料庫連接代碼,手動拋出DBException異常但未使用try…catch進行捕獲處理,該異常將被PHP自訂異常處理器,exception_uncaught_handler()函數處理:
複製代碼 代碼如下:$this->resConn = mysql_connect ($CONFIGS['db_host'], $CONFIGS['db_user'], $CONFIGS['db_pwd']);
if (false == is_resource($this->resConn))
throw new DBException('資料庫連接失敗。'.mysql_error($this->resConn));
4、商務邏輯一瞥:
複製代碼 代碼如下:if (0 != strcmp($curAlbum->interest_id, $it))

throw new NotFoundException('很抱歉,你所訪問的相簿不存在');

以上就是PHP自訂異常處理器的具體使用方法.

php執行個體代碼如下:
複製代碼 代碼如下:<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': '.$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "someone@example.com";

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();
}
?>
例子解釋:上面的代碼測試了兩種條件,如何任何條件不成立,則拋出一個異常.

1.customException() 類是作為舊的 exception 類的一個擴充來建立的,這樣它就繼承了舊類的所有屬性和方法.

2.建立 errorMessage() 函數,如果 e-mail 地址不合法,則該函數返回一個錯誤訊息.

3.執行 "try" 代碼塊,在第一個條件下,不會拋出異常.

4.由於 e-mail 含有字串 "example",第二個條件會觸發異常.

5."catch" 代碼塊會捕獲異常,並顯示恰當的錯誤訊息.

如果沒有捕獲 customException,緊緊捕獲了 base exception,則在那裡處理異常,重新拋出異常,有時,當異常被拋出時,您也許希望以不同於標準的方式對它進行處理,可以在一個 "catch" 代碼塊中再次拋出異常,代碼如下:

總結:PHP異常的使用方法分三步:

第一步:定義異常類,如果不定義就用系統預設的異常類;

第二步:當出現異常時用 throw 拋出異常,例如 ex1($num2);異常的參數是$num2用該異常的getMessage()擷取;

第三步:觸發異常,用try子句,當滿足條件時 throw new ex1($num);

第四步:catch捕獲異常 catch (ex2 $e),相當於執行個體化一個定義好的異常類ex2為$e;

注意,異常可以定義多個,但是只能觸發一個,也就是說只能用catch捕獲一個異常.

基本異常類,建立可拋出一個異常的函數:
複製代碼 代碼如下:function num($num){
if ($num>1){//異常拋出條件
$msg="數值不能大於1″;//異常提示資訊
throw new Exception($msg);//拋出異常
}
echo "數值小於1″;
}
//在 "try" 代碼塊中觸發異常
try {
num(3);
echo "執行正常";
}
//捕獲異常
catch (Exception $e){
echo "錯誤資訊:".$e->getMessage();//Exception()的系統方法擷取異常資訊
echo "錯誤檔案:".$e->getFile();//Exception()的系統方法擷取異常檔案名稱
echo "行數:".$e->getLine();//Exception()的系統方法擷取異常行數
}
//======================================================================
echo "
========================================================
";
//擴充基本異常類
function checkEmail($email){//定義一個可以拋出異常的判斷EMAIL合法性的函數
if (filter_var($email,FILTER_VALIDATE_EMAIL)==false){
throw new checkEmailException($email);//拋出異常用EMAIL做參數
}
echo "郵件合法";
}
class checkEmailException extends Exception{//定義擴充異常類
public function errormsg(){
$msg="錯誤原因:".$this->getMessage()."不是一個合法的EMAIL地址!";
$msg.="錯誤檔案名稱:".$this->getFile();
$msg.="錯誤行數:".$this->getLine();
echo $msg;
}
}
$email="email…..@chhua.com";
try {//觸發異常
checkEmail($email);
}
//捕獲異常
catch (checkEmailException $e){
$e->errormsg();
}
//==================================多個異常的捕獲
echo "
===================================================
";
class ex1 extends Exception{//定義一個異常類
public function msg(){
$msg="錯誤原因:".$this->getMessage()."大於100
";
$msg.="錯誤檔案:".$this->getFile()."
";
$msg.="錯誤碼:".$this->getCode()."
";
$msg.="行數:".$this->getLine()."
";
echo $msg;
}
}
class ex2 extends Exception{//定義一個異常類
public function msg(){
$msg="錯誤原因:".$this->getMessage()."等於100
";
$msg.="錯誤檔案:".$this->getFile()."
";
$msg.="行數:".$this->getLine()."
";
echo $msg;
}
}
$num2=100;
try {
if ($num2>100){//當條件滿足時觸發
throw new ex1($num2);
}
if ($num2==100){//當條件滿足時觸發
throw new ex2($num2);
}
}
catch (ex2 $e){//捕獲觸發的異常
$e->msg();
}
catch (ex1 $e){//捕獲觸發的異常
$e->msg();
}

希望本文所述對大家的php程式設計有所協助。

http://www.bkjia.com/PHPjc/940486.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/940486.htmlTechArticlephp中異常處理方法小結,php處理方法小結 本文執行個體總結了php中異常處理方法。分享給大家供大家參考。具體分析如下: 當異常被觸發時,通...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.