PHP 5.3 (2009 年釋出) 是里程碑版本,引入多項現代化語言特性,奠定現代 PHP 框架(Laravel、Symfony 等)的基礎。本文系統整理六大核心新特性並附程式碼範例。
解決類別/函數/常數命名衝突,取代過去以底線模擬的偽命名空間(如 Zend_Db_Table_Select)。
<?php
// 5.3 前
class Zend_Db_Table_Select { }
// 5.3 後
namespace Zend\Db\Table;
class Select { }
使用 use 匯入、as 別名、\ 全域空間前綴。
關鍵字 static:: 取代 self::,讓靜態方法在繼承鏈中依實際呼叫類別解析。
class A {
public static function who() { echo __CLASS__; }
public static function test() { static::who(); } // 晚期綁定
}
class B extends A {
public static function who() { echo __CLASS__; }
}
B::test(); // 輸出 B(若用 self:: 則輸出 A)
提供無條件跳轉,慎用以免破壞程式結構。PHP 5.3+ 僅支援跳轉至同一檔案/作用域內的標籤。
for ($i = 0; $i < 10; $i++) {
if ($i === 5) goto END_LOOP;
echo $i;
}
END_LOOP:
echo '結束';
Closure 類別實現閉包,use 關鍵字繼承外部變數(預設值傳遞,加 & 為引用)。
$msg = 'hello';
$callback = function() use ($msg) { echo $msg; };
$msg = 'hello world!';
$callback(); // 輸出 hello(值捕獲時刻)
PHP 7.4+ 引入箭頭函數 fn() => ... 自動捕獲外部變數。
對應 __call(),處理不存在的靜態方法呼叫。
class Foo {
public static function __callStatic($method, $args) {
echo "呼叫靜態方法 $method 參數: " . implode(', ', $args);
}
}
Foo::bar(1, 2); // 輸出:呼叫靜態方法 bar 參數: 1, 2
類別內部可使用 const 定義常數,取代 define(),支援命名空間與類別作用域。
class Config {
const VERSION = '1.0';
const OPTIONS = ['debug' => true];
}
echo Config::VERSION; // 1.0
dirname(__FILE__)。expr1 ?: expr3(Elvis operator)。<<<'END' 不解析變數的字串。$class::$method()。Exception 實作 Throwable 介面(PHP 7+),可多重 catch。PHP 5.3 已於 2014 年停止安全更新,現代專案最低建議 PHP 8.1+。升級時需注意:register_globals、magic_quotes、safe_mode 等特性已移除;mysql_* 函數已棄用,改用 PDO 或 MySQLi。