PHP 5 引入面向對象異常機制,配合時間戳函數構建健壯、可追蹤的應用。本文涵蓋異常基礎語法、系統內置異常類、自定義異常、多異常捕獲、Unix 時間戳概念與常用函數。
<?php
try {
$error = 'Always throw this error';
throw new Exception($error); // 拋出異常對象
echo 'Never executed'; // 不會執行
} catch (Exception $e) {
echo 'Caught exception: ' . $e->getMessage() . "\n";
}
echo 'Hello World'; // 程序繼續執行,未崩潰
class Exception {
protected $message = 'Unknown exception'; // 異常信息
protected $code = 0; // 用戶自定義代碼
protected $file; // 發生異常文件名
protected $line; // 發生異常行號
public function __construct($message = null, $code = 0);
final public function getMessage(); // 返回異常信息
final public function getCode(); // 返回異常代碼
final public function getFile(); // 返回文件名
final public function getLine(); // 返回行號
final public function getTrace(); // 返回 backtrace 數組
final public function getTraceAsString(); // 格式化字符串回溯
public function __toString(); // 可輸出字符串表示
}
class MyException extends Exception {
public function __construct($message, $code = 0) {
parent::__construct($message, $code); // 建議調用父構造函數
}
public function __toString() {
return __CLASS__ . ":[" . $this->code . "]:" . $this->message . "
";
}
public function customFunction() {
echo "按自定義方法處理該類型異常
";
}
}
try {
throw new MyException('允許拋出這個錯誤');
} catch (MyException $e) {
echo '捕獲異常: ' . $e; // 自動調用 __toString()
$e->customFunction(); // 調用自定義處理方法
}
echo '你好呀';
try {
// 可能拋出 Exception、MyException、PDOException 等
} catch (MyException $e) {
// 處理 MyException
} catch (PDOException $e) {
// 處理 PDO 異常
} catch (Exception $e) {
// 兜底處理其他 Exception
}
// 注意:捕獲順序從具體到一般,子類在前,父類在後
Unix 時間戳:自 1970-01-01 00:00:00 UTC 至今的總秒數(不含閏秒),32 位有符號整數範圍至 2038-01-19 03:14:07(Y2K38 問題),64 位系統無此限制。
| 函數 | 說明 | 示例輸出 |
|---|---|---|
time() | 當前時間戳 | 1700000000 |
date('Y-m-d H:i:s', $ts) | 格式化時間戳 | 2023-11-15 10:30:00 |
strtotime('+1 day') | 相對時間解析為時間戳 | 1700086400 |
mktime(h,i,s,m,d,y) | 構造時間戳 | 1700000000 |
microtime(true) | 微秒級時間戳(浮點數) | 1700000000.1234 |
getdate($ts) | 時間戳轉關聯數組 | array('year'=>2023, 'mon'=>11, ...) |
異常機制讓錯誤處理結構化、可控、可追蹤;時間戳是業務邏輯(訂單號、緩存過期、簽名時效、日誌記錄)的時間基準。下篇將繼續講解 DateTime 類、時區處理、高精度計時等進階主題。