PHP 教程

PHP 教程 PHP 简介 PHP 下载安装 PHP 语法 PHP 注释 PHP 变量 PHP Echo / Print PHP 数据类型 PHP 字符串 PHP 数值 PHP Math PHP 常量 PHP 运算符 PHP If...Else...Elseif PHP Switch PHP 循环 PHP 函数 PHP 数组 PHP 全局变量 PHP 正则表达式

PHP 表单

PHP 表单处理 PHP 表单验证 PHP 表单验证必填字段 PHP 表单验证URL/E-mail PHP 表单验证实例

PHP 高级教程

PHP 日期和时间 PHP Include PHP 文件处理 PHP 文件打开/读取 PHP 文件创建/写入 PHP 文件上传 PHP Cookies PHP Sessions PHP Filters PHP Filters Advanced PHP 回调函数 PHP JSON PHP 异常处理

PHP 面向对象

PHP 什么是 OOP PHP 类和对象 PHP 构造函数 PHP 析构函数 PHP 访问修饰符 PHP 继承 PHP 类常量 PHP 抽象类 PHP 接口 PHP 特征 PHP 静态方法 PHP 静态属性 PHP 命名空间 PHP 可迭代对象

MySQL 数据库

MySQL Database MySQL Connect MySQL Create DB MySQL Create Table MySQL Insert Data MySQL Get Last ID MySQL Insert Multiple MySQL Prepared MySQL Select Data MySQL Where MySQL Order By MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP XML

PHP XML Parsers PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Intro AJAX PHP AJAX Database AJAX XML AJAX Live Search AJAX Poll

PHP 实例

PHP 实例 PHP 编译器 PHP 测验 PHP 练习

PHP 参考手册

PHP 概述 PHP Array PHP Calendar PHP Date PHP Directory PHP Error PHP Exception PHP Filesystem PHP Filter PHP FTP PHP JSON PHP Keywords PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP Network PHP Output Control PHP RegEx PHP SimpleXML PHP Stream PHP String PHP Variable Handling PHP XML Parser PHP Zip PHP Timezones


PHP 异常处理

什么是异常?

异常是描述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 异常参考手册

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