PHP 5.3 是里程碑式版本,引入命名空間、匿名函式、Late Static Binding 等現代特性,同時移除多項已棄用功能。本文整理升級時最常遇到的相容性問題與調整重點,助你平滑遷移專案。
$fn = function() { ... }; 語法,強化函式式程式設計能力。static:: 關鍵字讓繼承體系中靜態方法正確解析至子類別。<<'END' 提供不解析變數的字串定義方式。expr1 ?: expr3 相當於 expr1 ? expr1 : expr3。$class::$var、$class::method() 支援變數類別名。| 項目 | 說明 |
|---|---|
| 移除 register_globals | PHP 5.3 強制關閉,程式碼不得依賴全域變數自動註冊。 |
| 移除 magic_quotes_gpc | 不再自動轉義輸入資料,需改用 prepared statements 或手動過濾。 |
| 移除 safe_mode | 改用 open_basedir、disable_functions 等更細緻的權限控制。 |
| EREG 正規表示式函式棄用 | 全面改用 PCRE (preg_*) 函式族群,EREG 於 5.3 發出 E_DEPRECATED。 |
| 參考傳值呼叫時機變更 | 呼叫時以 &$var 強制參考在 5.3 發出警告,僅能在函式定義處宣告參考參數。 |
| 新保留關鍵字 | namespace、goto、__DIR__ 等成為保留字,不可作為類別/函式/常數名稱。 |
ereg*、split*、sql_regcase 呼叫,替換為 preg_* 對應函式。register_globals、magic_quotes*、safe_mode 相關設定或程式碼邏輯。func(&$var) 移除,改在函式定義 function func(&$var) 宣告。E_DEPRECATED 與 E_STRICT 警告。PHP 5.3 內建 mysqlnd (MySQL Native Driver) 取代 libmysqlclient,減少記憶體複製、提升查詢速度;垃圾回收機制改善循環參考洩漏問題。升級後通常可觀察到 10-20% 的吞吐量提升。