PHP 5.x 時代(2006–2014)奠定了現代 PHP 開發的基石。本文系統梳理 PHP 5.2 至 5.6 各版本核心新特性,附帶代碼範例與實務建議,助你快速掌握版本演進脈絡。
callable、array,不支援標量型別。json_encode()、json_decode():Web API 資料交換標準化,json_decode($json, true) 可返回關聯陣列。register_globals、magic_quotes_gpc、safe_mode:安全隱患,5.4 完全移除。| 特性 | 說明 | 範例 |
|---|---|---|
| 匿名函式(Closure) | 支援 use 捕獲外部變數,廣泛用於回調 | $fn = function($x) use($y) { return $x + $y; }; |
魔術方法 __invoke、__callStatic | 物件可直接當函式調用;靜態方法不存在時觸發 | $obj($arg) |
| 命名空間 | 反斜杠 \ 分隔,支援 use 別名,配合 autoload 實現目錄結構映射 | namespace App\Models; use Foo\Bar as B; |
| 延遲靜態綁定 | static:: 關鍵字,解決繼承中靜態調用多態問題 | 見前文詳細範例 |
| Heredoc/Nowdoc 改進 | 支援雙引號/單引號語義,可用於函式參數、類別常數/屬性初始化 | <<< 'EOT' ... EOT (Nowdoc) |
const 定義常數 | 類別與全域均可用,僅限編譯時常數表達式 | const API_VER = 'v1'; |
| 三元運算子簡寫 | $a ?: 'default' 等同 $a ? $a : 'default' | |
| Phar 封裝 | 將多檔案打包為 .phar 可執行封存,支援簽名驗證 | require 'app.phar'; |
<?= ... ?> 永久啟用:模板輸出更簡潔。[]:['key' => 'val'] 取代 array(...)。php -S localhost:8000 秒級啟動開發環境,支援路由腳本。$class::{$method}()、實例化鏈式調用 (new Class)->method()、函式回傳陣列直接解引用 func()[0]。function gen() { yield 1; yield 2; } 產生迭代器,記憶體高效處理大數據集。list() 用於 foreach:foreach ($arr as list($a, $b)) 解構巢狀陣列。mysql_* 函式、移除 Windows XP 支援、ClassName::class 取得完整類別名、empty() 支援表達式、try-catch-finally。const B = A + 1; const STR2 = self::STR . ' world';func($arg = CONST_VAL)...$args:取代 func_get_args(),支援型別提示 function sum(int ...$nums),調用時陣列展開 sum(1, ...$arr)。use function NS\fn; use const NS\CONST;symfony/polyfill 可在舊版使用新功能(password_hash、array_column 等)。PHP 5.x 確立了自動載入、命名空間、Traits、生成器、現代密碼學 API 等核心機制,直接塑造了今日 Composer、PSR、Laravel/Symfony 等生態系統。理解演進歷程,有助於寫出更符合現代 PHP 風格的程式碼。