Php/php exceptions

来自菜鸟教程
跳转至:导航、​搜索

PHP异常

什么是例外?

异常是描述PHP脚本的错误或意外行为的对象。

许多PHP函数和类均引发异常。

用户定义的函数和类也可能引发异常。

异常是在遇到无法使用的数据时停止该功能的好方法。

引发异常

The throw 语句允许用户定义的函数或方法引发异常。引发异常时,将不执行其后的代码。

如果未捕获到异常,则会出现致命错误,并显示“未捕获的异常”消息。

让我们尝试引发一个异常而不捕获它:

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) 
  {
    throw new Exception("Division by zero");
  }
  
  return $dividend / $divisor;
}

echo divide(5, 0);
?>

结果将如下所示:

Fatal error: Uncaught Exception: Division by zero in 
  C:\webfolder\test.php:4

Stack trace: #0 C:\webfolder\test.php(9): 

  divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4

try ... catch语句

为了避免上述示例中的错误,我们可以使用 try...catch 语句以捕获异常并继续该过程。

句法

  try {
  code that can throw exceptions
} catch(Exception $e) {
  
  code that runs when an exception is caught
}

引发异常时显示一条消息:

 <?php
function divide($dividend, $divisor) {
  if($divisor == 
  0) {
    throw new Exception("Division by zero");
  
  }
  return $dividend / $divisor;
}

try {
  echo 
  divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide.";

  }
?>

catch块指示应捕获的异常类型以及可用于访问异常的变量名称。在上面的示例中,异常类型为 Exception 变量名是 $e .

try ... catch ... finally语句

The try...catch...finally 语句可用于捕获异常。中的代码 finally 无论是否捕获到异常,block始终将运行。If finally 存在, catch 块是可选的。

句法

  try {
  code that can throw exceptions
} catch(Exception $e) {
  
  code that runs when an exception is caught
} finally {
  code that 
  always runs regardless of whether an exception was caught
}

引发异常时显示一条消息,然后指示该进程已结束:

 <?php
function divide($dividend, $divisor) {
  if($divisor 
  == 0) {
    throw new Exception("Division by zero");
  
  }
  return $dividend / $divisor;
}

try {
  echo 
  divide(5, 0);
} catch(Exception $e) {
  echo "Unable to 
  divide. ";
} finally {
  echo "Process complete.";
}
?>

即使未捕获到异常,也输出一个字符串:

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) 
  {
    throw new Exception("Division by zero");
  }
  
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} finally {
  echo 
  "Process complete.";
}
?>

异常对象

异常对象包含有关函数遇到的错误或意外行为的信息。

句法

  new Exception(message, code, previous)

参数值

参数 描述
信息 可选的。一个字符串,描述为什么引发异常
code 可选的。一个整数,可用于轻松地将此异常与其他相同类型的异常区分开
以前 可选的。如果将此异常引发到另一个异常的catch块中,则建议将该异常传递到此参数中

方法

捕获异常时,下表显示了可用于获取有关异常信息的一些方法:

方法 描述
getMessage() 返回描述为什么引发异常的字符串
getPrevious() 如果此异常是由另一个异常触发的,则此方法将返回上一个异常。如果不是,则返回

null

getCode() 返回异常代码
getFile() 返回引发异常的文件的完整路径
getLine() 返回引发异常的代码行的行号

输出有关引发的异常的信息:

 <?php
function divide($dividend, $divisor) {
  if($divisor == 0) 
  {
    throw new Exception("Division by zero", 1);
  
  }
  return $dividend / $divisor;
}

try {
  echo 
  divide(5, 0);
} catch(Exception $ex) {
  $code = $ex->getCode();
  
  $message = $ex->getMessage();
  $file = $ex->getFile();
  
  $line = $ex->getLine();
  echo "Exception thrown in $file on line 
  $line: [Code $code]
  $message";
}
?>

完整的异常参考

有关完整的参考,请访问我们的 完整的PHP异常参考

.

该参考资料包含所有Exception方法的描述和示例。