天天看點

try catch異常

 function ActionSend($mobile, $key='')

{

  try

 {

  if (empty($key)) {

   throw new Exception('key值不能為空');

  }

  if($key != 'adfasdfdasfs') {

   throw new Exception('key值不一緻');

  echo 'oo';

 }

 catch(Exception $e)

  $info['msg'] = $e->getMessage();

 return $info;

}

Try - 使用異常的函數應該位于 "try" 代碼塊内。如果沒有觸發異常,則代碼将照常繼續執行。但是如果異常被觸發,會抛出一個異常。

Throw - 這裡規定如何觸發異常。每一個 "throw" 必須對應至少一個 "catch"

Catch - "catch" 代碼塊會捕獲異常,并建立一個包含異常資訊的對象

當異常被抛出時,其後的代碼不會繼續執行,PHP 會嘗試查找比對的 "catch" 代碼塊。

如果異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那麼将發生一個嚴重的錯誤(緻命錯誤),并且輸出 "Uncaught Exception" (未捕獲異常)的錯誤消息。

try-catch 語句由一個 try 塊和其後所跟的一個或多個 catch 子句(為不同的異常指定處理程式)構成。此語句會采用下列形式之一:

try try-block

catch (exception-declaration-1) catch-block-1

catch (exception-declaration-2) catch-block-2

...

try try-block catch catch-block

其中:

try-block

包含應引發異常的代碼段。

exception-declaration, exception-declaration-1, exception-declaration-2

異常對象聲明。

catch-block, catch-block-1, catch-block-2

包含異常處理程式。

備注

try-block 包含可能導緻異常的保護代碼塊。該塊一直執行到引發異常或成功完成為止。例如,下列轉換 null 對象的嘗試引發 NullReferenceException 異常:

object o2 = null;

try

   int i2 = (int) o2;   // Error

catch 子句使用時可以不帶任何參數,在這種情況下它捕獲任何類型的異常,并被稱為一般 catch 子句。它還可以采用從 System.Exception 派生的對象參數,在這種情況下它處理特定的異常。例如:

catch (InvalidCastException e)

在同一個 try-catch 語句中可以使用一個以上的特定 catch 子句。這種情況下 catch 子句的順序很重要,因為會按順序檢查 catch 子句。将先捕獲特定程度較高的異常,而不是特定程度較小的異常。

在 catch 塊中可以使用 throw 語句再次引發已由 catch 語句捕獲的異常。例如:

   throw (e);   // Rethrowing exception e

如果要再次引發目前由無參數的 catch 子句處理的異常,則使用不帶參數的 throw 語句。例如:

catch

   throw;

請在 try 塊内部隻初始化其中聲明的變量;否則,完成該塊的執行前可能發生異常。例如,在下面的代碼示例中,變量 x 在 try 塊内初始化。試圖在 Write(x) 語句中的 try 塊外部使用此變量時将生成編譯器錯誤:使用了未指派的局部變量。

public static void Main()

   int x;

   try

   {

      x = 123;   //   Don't do that.

      // ...

   }

   catch

   Console.Write(x);   // Error: Use of unassigned local variable 'x'.

有關 catch 的更多資訊,請參見 try-catch-finally。

示例

在此例中,try 塊包含對可能導緻異常的 MyFn() 方法的調用。catch 子句包含僅在螢幕上顯示消息的異常處理程式。當從 MyFn() 内部調用 throw 語句時,系統查找 catch 語句并顯示 Exception caught 消息。

// Rethrowing exceptions:

using System;

class MyClass

   public static void Main()

      MyClass x = new MyClass();

      try

      {

         string s = null;

         x.MyFn(s);

      }

      catch (Exception e)

         Console.WriteLine("{0} Exception caught.", e);

   public void MyFn(string s)

      if (s == null)

         throw(new ArgumentNullException());

   }  

輸出

發生以下異常:

System.ArgumentNullException

此例使用了兩個 catch 語句。最先出現的最特定的異常被捕獲。

// Ordering catch clauses

      // Most specific:

      catch (ArgumentNullException e)

         Console.WriteLine("{0} First exception caught.", e);

      // Least specific:

         Console.WriteLine("{0} Second exception caught.", e);

         throw new ArgumentNullException();

在前面的示例中,如果從特定程度最小的 catch 子句開始,您将收到此錯誤資訊:

A previous catch clause already catches all exceptions of this or a super type ('System.Exception')

但是,若要捕獲特定程度最小的異常,請使用下面的語句替換 throw 語句:

throw new Exception();

 詳細見:

http://www.w3school.com.cn/php/php_exception.asp

繼續閱讀