PHP 5 引入了革命性的面向對象重寫(Zend Engine 2),引入 Java/C++ 風格的對象模型。本文為「初探 PHP 5」系列第一部分,詳細講解新對象模型、構造/析構函數、引用語義、克隆、可見性控制、接口與抽象類等核心特性。
PHP 4 中對象賦值/傳參默認複製(值語義),需显式 & 才能引用。PHP 5 對象默認按引用傳遞,底層採用「對象存儲 + 句柄」機制:
$obj2 = $obj1 兩者指向同一實例,修改屬性相互影響。__construct 與析構函數 __destructclass Foo {
public $x;
public function __construct($x) { $this->x = $x; }
public function __destruct() { echo "bye bye"; }
}
$o = new Foo(4); // 輸出 4,腳本結束前輸出 "bye bye"
parent::__construct()。__clone()因引用語義,需深拷貝時使用 $copy = $obj->__clone()。可在類中實現 __clone() 魔術方法自定義拷貝邏輯(如複製關聯對象、重置 ID)。
| 修飾符 | 類內 | 子類 | 外部 |
|---|---|---|---|
| public | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✗ |
| private | ✓ | ✗ | ✗ |
最佳實踐:屬性默認 private,通過 getter/setter 暴露;內部協作用 protected;API 用 public。
interface 與 implementsinterface Displayable { public function display(); }
interface Printable { public function doPrint(); }
class Report implements Displayable, Printable { /* 實現兩方法 */ }
abstract class__call 重載、__set/__get、類型提示、靜態成員、異常處理、命名空間