轻松上手,快乐学习!

PHP 教程

PHP 教程PHP 简介PHP 下载安装PHP 语法PHP 注释PHP 变量PHP Echo / PrintPHP 数据类型PHP 字符串PHP 数值PHP MathPHP 常量PHP 运算符PHP If...ElsePHP SwitchPHP 循环While 循环Do While 循环For 循环Foreach 循环Break/ContinuePHP 函数PHP 数组索引数组关联数组多维数组数组排序PHP 全局变量$GLOBALS$_SERVER$_REQUEST$_POST$_GETPHP 正则表达式PHP 表单处理PHP 表单验证PHP 表单验证必填字段PHP 表单验证URL/E-mailPHP 表单验证实例PHP 日期和时间PHP IncludePHP 文件处理PHP 文件打开/读取PHP 文件创建/写入PHP 文件上传PHP CookiesPHP SessionsPHP FiltersPHP Filters AdvancedPHP 回调函数PHP JSONPHP 异常处理PHP 什么是 OOPPHP 类和对象PHP 构造函数PHP 析构函数PHP 访问修饰符PHP 继承PHP 类常量PHP 抽象类PHP 接口PHP 特征PHP 静态方法PHP 静态属性PHP 命名空间PHP 可迭代对象MySQL DatabaseMySQL ConnectMySQL Create DBMySQL Create TableMySQL Insert DataMySQL Get Last IDMySQL Insert MultipleMySQL PreparedMySQL Select DataMySQL WhereMySQL Order ByMySQL Delete DataMySQL Update DataMySQL Limit DataPHP XML ParsersPHP SimpleXML ParserPHP SimpleXML - GetPHP XML ExpatPHP XML DOMAJAX IntroAJAX PHPAJAX DatabaseAJAX XMLAJAX Live SearchAJAX PollPHP 实例PHP 编译器PHP 测验PHP 练习

PHP 参考手册

PHP 概述PHP ArrayPHP CalendarPHP DatePHP DirectoryPHP ErrorPHP ExceptionPHP FilesystemPHP FilterPHP FTPPHP JSONPHP KeywordsPHP LibxmlPHP MailPHP MathPHP MiscPHP MySQLiPHP NetworkPHP Output ControlPHP RegExPHP SimpleXMLPHP StreamPHP StringPHP Variable HandlingPHP XML ParserPHP ZipPHP 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 异常参考手册

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