手册目录

PHP课程

浏览10489
更新时间2025-08-06

什么是异常?

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

许多 PHP 函数和类都会抛出异常。

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

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

抛出异常

throw 语句允许用户定义的函数或方法抛出异常。当异常被抛出时,其后面的代码将不会被执行。

如果异常没有被捕获,将会出现带有 "Uncaught Exception" 消息的致命错误。

让我们尝试抛出一个没有捕获的异常:

实例

<?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 {
  可能抛出异常的代码
} catch(Exception $e) {
  当捕获到异常时运行的代码
}

实例

当抛出异常时显示一条消息:

<?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 "无法进行除法运算。";
}
?>
运行实例 »

点击 "运行实例" 按钮查看在线实例

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

try...catch...finally 语句

try...catch...finally 语句可以用于捕获异常。finally 块中的代码无论是否捕获到异常都会运行。如果 finally 存在,catch 块是可选的。

语法

try {
  可能抛出异常的代码
} catch(Exception $e) {
  当捕获到异常时运行的代码
} finally {
  无论是否捕获到异常都会运行的代码
}

实例

当抛出异常时显示一条消息,然后指示过程已完成:

<?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 "无法进行除法运算。";
} finally {
  echo "过程已完成。";
}
?>
运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

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

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

try {
  echo divide(5, 0);
} finally {
  echo "过程已完成。";
}
?>
运行实例 »

点击 "运行实例" 按钮查看在线实例

异常对象

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

语法

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 "在文件 $file 的第 $line 行抛出了异常:[代码 $code] \n$message";
}
?>
运行实例 »

点击 "运行实例" 按钮查看在线实例

完整的异常参考手册

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

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

相关视频

更多

免费

php8,我来也
初级php8,我来也

321756次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

382414次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

282717次学习

收藏

免费

简单聊聊PHP创业那点事
初级简单聊聊PHP创业那点事

13413次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时 | 62.5万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时 | 39.7万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时 | 73.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号