截至 2014 年,PHP 5.5 為穩定版,但大量用戶仍停留在 5.2/5.3。本文系統梳理 5.2 至 5.6 各版本核心新特性,為版本升級提供參考。
__autoload() / spl_autoload_register():類自動加載json_encode()、json_decode(),Web 數據交換標準| 特性 | 說明 |
|---|---|
| 廢棄功能 | Register Globals、Magic Quotes、Safe Mode(5.4 移除) |
| 匿名函數/閉包 | $fn = function($arg) use ($var) { ... }; 支援 use 捕獲外部變量 |
| 魔術方法 | __invoke()(對象當函數調用)、__callStatic()(靜態方法重載) |
| 命名空間 | namespace、use,反斜杠分隔,配合 spl_autoload_register 實現 PSR-0 自動加載 |
| 後期靜態綁定 | static::method() 解決繼承中靜態調用綁定問題 |
| Heredoc/Nowdoc | Nowdoc 單引號標識符不解析變量,支援類成員初始化 |
const 定義常量 | 類中及全局均可用,僅限靜態值 |
| 三元運算符簡寫 | echo $a ?: 'default'; |
| Phar | PHP 歸檔格式,模仿 JAR,支援簽名驗證、直接執行 |
<?= $var ?> 永久啟用,純 PHP 文件建議省略結束標籤['key' => 'value'] 替代 array()use TraitName; 解決單繼承限制,支援衝突解決、別名、權限修改php -S localhost:8000 [router.php] 開發調試專用(new Class)->method()、func()[0]、動態靜態調用 Class::{$method}()function gen() { yield 1; yield 2; } 返回 Generator 實現惰性迭代foreach ($arr as list($a, $b)) 解構嵌套數組mysql_* 函數,推薦 PDO/MySQLiClassName::class 獲取完整限定名empty() 支援表達式try-catch-finally 完整異常處理const B = A + 1;、類常量運算、常量作為默認參數function sum(...$args) { ... } 替代 func_get_args(),調用時 sum(1, ...$arr) 展開數組use const、use function 導入常量/函數php -l 語法檢查、單元測試覆蓋核心業務mysql_* 為 PDO,修正 ereg 正則為 pregstripslashes 等兼容邏輯