## 异常处理机制
异常: 业务逻辑上出现不合预期、与正常流程不同的状况,使用异常改变脚本正常流程。
PHP 异常处理机制借鉴了 java 等语言,但是 PHP 的异常处理机制是不健全的。
PHP 无法自动捕获异常的(绝大多数),只有主动抛出异常并捕捉。
异常处理语法格式
```
try {
} catch (Exception $e) {
}
```
异常处理规则:
* 需要进行异常处理的代码放入 try 代码块内,以便捕获潜在的异常。
* 每个 try 或者 throw 代码块至少拥有一个 catch 代码。
* 使用多个 catch 代码块可以捕获不同种类的异常。
* 可以在 try 代码块中再次抛出异常。
* 如果抛出了异常,就必须捕获它,或者使用顶级异常处理机制。
```
<?php
try {
$file = fopen("tmp.txt", "r");
if(!$file) {
throw new Exception("文件打开失败");
}
} catch (Exception $e) {
echo $e->getMessage();
}
?>
```
> **Note:** 当 throw 一个异常以后,后面的语句不会继续执行,PHP 会尝试找到匹配的 catch 处理块。
### 设置顶层异常处理器
如果异常没有被捕获,PHP 会发出一个致命错误,除非定义了 `set_exception_handler()` 顶级异常处理函数。
```
<?php
function my_exception($e)
{
echo "Message: ". $e->getMessage() . PHP_EOL;
echo "Line: " . $e->getline() . PHP_EOL;
}
set_exception_handler("my_exception");
throw new Exception("Uncaught Exception occurred");
?>
```
- 基本语法
- PHP标记
- 指令分隔符
- 从HTML中分离
- 注释
- 数据类型
- 布尔值
- 整数
- 浮点数
- 字符串
- 数组
- 对象
- 资源
- 空值
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 常量
- 常量语法
- 魔术常量
- 运算符
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 递增与递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if条件结构
- switch条件结构
- while循环结构
- do-while循环结构
- for循环结构
- foreach循环结构
- 包含文件
- 函数
- 自定义函数
- 可变函数
- 匿名函数
- 递归函数
- 类与对象
- 基本概念
- 属性
- 方法
- 类常量
- 构造函数和析构函数
- 访问控制
- 继承
- 抽象类
- 接口
- Trait
- 重载
- 对象遍历
- 魔术方法
- Final关键字
- 命名空间
- 自动加载
- 错误处理
- 错误显示
- 错误日志
- 错误报告
- 自定义错误处理
- 异常处理
- 异常处理机制
- 扩展异常处理类
- 字符操作
- 数组操作
- 时间操作
- 表单操作
- GET提交
- POST提交
- 文件上传
- 会话控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件属性
- 读取文件
- 写入文件
- 文件管理
- 文件锁
- 目录处理
- 路径处理
- 网络操作
- HTTP协议
- Socket操作
- CURL操作
- PDO操作
- 介绍
- 连接管理
- 预处理语句
- 事务处理
- 错误处理
- 图像操作
- 正则表达式
- 标准推荐
- 包管理器
- 设计模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御