try catch异常

简介:

 

 

 
  1. <?php 
  2. //创建可抛出一个异常的函数 
  3. function checkNum($number
  4.  { 
  5.  if($number>1) 
  6.   { 
  7.   throw new Exception("Value must be 1 or below"); 
  8.   } 
  9.  return true; 
  10.  } 
  11.  
  12. //在 "try" 代码块中触发异常 
  13. try 
  14.  { 
  15.  checkNum(4); 
  16.  //If the exception is thrown, this text will not be shown 
  17.  echo 'If you see this, the number is 1 or below'
  18.  } 
  19.  
  20. //捕获异常 
  21. catch(Exception $e
  22.  { 
  23.  echo 'Message: ' .$e->getMessage(); 
  24.  } 
  25. ?> 

 

 

 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;
}

  1. Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
  2. Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
  3. 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 语句捕获的异常。例如:
catch (InvalidCastException e) 
{
   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
using System;
class MyClass 
{
   public static void Main() 
   {
      MyClass x = new MyClass();
      try 
      {
         string s = null;
         x.MyFn(s);
      }

      // Most specific:
      catch (ArgumentNullException e) 
      {
         Console.WriteLine("{0} First exception caught.", e);
      }

      // Least specific:
      catch (Exception e) 
      {
         Console.WriteLine("{0} Second exception caught.", e);
      }

 

   }

 

   public void MyFn(string s) 
   {
      if (s == null) 
         throw new ArgumentNullException();
   }   
}
输出
发生以下异常:
System.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






      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/922282,如需转载请自行联系原作者



相关文章
|
6月前
每日一道面试题之try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
每日一道面试题之try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
|
18天前
|
C++
C++异常处理try和throw以及catch的使用
C++异常处理try和throw以及catch的使用
|
4月前
|
Java 程序员
Java异常处理:Error和Exception有什么区别?
Java异常处理:Error和Exception有什么区别?
223 0
|
6月前
16 # 实现 catch 方法
16 # 实现 catch 方法
29 0
|
11月前
|
Java API Spring
RuntimeException和Exception的区别
RuntimeException和Exception的区别
98 0
|
12月前
|
JSON 安全 前端开发
替代try catch处理异常的优雅方式
替代try catch处理异常的优雅方式
|
Java 程序员 编译器
异常(Exception)
异常(Exception)
76 0
异常(Exception)
|
JavaScript 前端开发
错误与异常 之 try...catch语句
错误与异常 之 try...catch语句
91 0
|
Java
Java异常——处理机制Try-catch-finally
Java异常——处理机制Try-catch-finally
152 0