## 異常處理機制
異常: 業務邏輯上出現不合預期、與正常流程不同的狀況,使用異常改變腳本正常流程。
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防御