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