PHP 5.3 (2009/06/30) 被公認為 PHP 5 系列最重要版本,將原本規劃於 PHP 6 的核心特性提前釋出,並引入 mysqlnd 原生驅動大幅優化 MySQL 記憶體與效能。本文逐項剖析新特性、遷移指南、效能實測、棄用清單與生態影響。
<?php
namespace App\Service;
use Doctrine\ORM\EntityManagerInterface as EM;
use function Symfony\Component\String\u;
class UserService {
public function __construct(private EM $em) {}
public function slug(string $name): string { return u($name)->slug(); }
}
// 使用
$svc = new \App\Service\UserService($em);
use 別名、__NAMESPACE__ 常數<?php
$factor = 10;
$mul = function ($x) use ($factor) { return $x * $factor; };
$mul(3); // 30
// PHP 7.4 箭頭函數更簡潔:$mul = fn($x) => $x * $factor;
use 值綁定 (預設) / 參考綁定 use (&$var)Closure 類別提供 bindTo()、call()、fromCallable()<?php
class Model {
public static function table() { return static::TABLE; }
public static function findAll() { /* query static::table() */ }
}
class User extends Model { const TABLE = 'users'; }
class Post extends Model { const TABLE = 'posts'; }
User::table(); // 'users' (static:: 綁定至實際調用類別)
self:: 在繼承中綁定父類的問題| 指標 | libmysql (舊) | mysqlnd (新) | 優勢 |
|---|---|---|---|
| 記憶體佔用 | 雙重複製 (C→PHP) | 單次複製 (PHP 內部) | 減少 40%+ 記憶體 |
| 效能 | 基準 | +5-15% QPS | 少一次複製、內部優化 |
| 功能 | 基本 | 統計資訊、Lazy Connection、Plugin API | 支援 mysqlnd_ms (主從分離)、mysqlnd_qc (查詢快取) |
| 授權 | GPL (傳染性) | PHP License | 免 GPL 污染 |
| 變更 | 影響 | 修正 |
|---|---|---|
| 參數預設值不可為 by-ref | Fatal Error | 移除 & 或改用物件 |
| 新保留字 | namespace, goto, __invoke 等 | 重命名衝突常數/函數/類別 |
| 魔術方法簽名 | __toString 不能拋出例外 | 返回字串或觸發錯誤 |
| ereg/eregi 移除 | E_DEPRECATED → Fatal | 改用 preg_* / mb_ereg |
| register_globals/magic_quotes 移除 | 安全隱患 | 確認關閉、移除相容代碼 |
| 日期時區必設 | E_WARNING | php.ini 設定 date.timezone |
PHP 5.3 是 PHP 邁向現代化的分水嶺:命名空間解決全域污染、Closure 賦能函數式、mysqlnd 優化資料庫層、LSB 修正繼承語義、E_DEPRECATED 建立平滑遷移機制。這些特性直接催生了 Composer、Symfony 2、Laravel、現代 PHP 生態。今日回看,5.3 的每一項決策都經得起時間考驗。