PHP 异常处理

创建于 2024-12-03 / 28
字体: [默认] [大] [更大]

什么是异常?

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

异常由 PHP 函数和类引发。

用户定义的函数和类也可以抛出异常。

当函数遇到无法使用的数据时,异常是停止函数的好方法。


抛出异常

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 语句

try...catch...finally 语句可用于捕获异常。无论是否捕获到异常, finally 块中的代码都将始终运行。如果存在 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.";
}
?> 亲自试一试 »

Exception 异常对象

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

语法

new Exception(message, code, previous)

参数值

参数 描述
message 可选。描述为什么抛出异常的字符串
code 可选。一个整数,可以用来轻松地区分这个异常与其他同类型的异常
previous 可选。如果这个异常是在另一个异常的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 异常参考手册

如需完整的 PHP 异常参考手册,请访问我们的 PHP 异常参考手册

该参考手册包含所有异常方法的描述和示例。




0 人点赞过