PHP 4(2000)引入初步物件導向;PHP 5(2004)重寫物件模型(Zend Engine 2),引入介面、抽象類、靜態成員、魔術方法、PDO 等,不完全向下相容。國內虛擬主機長期停留 PHP 4,導致開發者須同時應對兩版本差異。
| 特性 | PHP 4 | PHP 5 |
|---|---|---|
| 可見性關鍵字 | 無(全部 public),屬性用 var | public / protected / private / static |
| 建構子 | 與類同名函數 | __construct() |
| 解構子 | 無 | __destruct() |
| 物件傳遞 | 值傳遞(複製整個物件) | 參考傳遞(控制代碼/handle) |
| 鏈式呼叫 | 不支援 $obj->a()->b() | 支援 |
| 字串插值解析物件屬性/方法 | 不支援 "{$obj->method()}" | 支援 |
| 靜態成員 | 無 | 支援 static |
| 介面 | 無 | 支援 interface |
| 抽象類 | 無 | 支援 abstract |
| Final 關鍵字 | 無 | 支援 |
| 自動載入 | 無 | __autoload() / spl_autoload_register() |
PHP 4 不支援可見性關鍵字。
// PHP 5
class A { public $x = 1; }
// PHP 4 相容寫法
class A { var $x = 1; }
// PHP 5
$obj->methodA()->methodB();
// PHP 4 需拆分
$tmp = $obj->methodA();
$tmp->methodB();
// PHP 5
echo "Status: {$db->isConnected()}";
// PHP 4
$status = $db->isConnected();
echo "Status: $status";
| 項目 | PHP 4 | PHP 5 |
|---|---|---|
| DLL/模組檔名 | php4ts.dll / php4apache2.dll | php5ts.dll / php5apache2.dll |
| Apache LoadModule | LoadModule php4_module .../php4apache2.dll | LoadModule php5_module .../php5apache2.dll |
| MySQL 支援 | 內建 | 模組化:extension=php_mysql.dll + libmysql.dll |
| CGI 執行檔 | php.exe | php-cgi.exe(CLI 為 php.exe) |
array_combine, array_udiff, array_walk_recursivefile_put_contents, scandirdate_sunrise, date_sunset, idatestr_split, substr_comparehttp_build_query, get_headers, curl_copy_handlesession.hash_function (MD5/SHA-1)session.hash_bits_per_character (4~6)zend.ze1_compatibility_mode(PHP 4 相容模式,慎用)include_once/require_once 避免重複定義致命錯誤。error_reporting(E_ALL) 發現相容性問題。mysql_* 函數(PHP 7 移除)。