首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 5 面向對象新特性深度解析(上):對象模型、構造析構、可見性、接口

     編輯:PHP 相關知識

PHP 5 面向對象新特性深度解析(上):對象模型、構造析構、可見性、接口

PHP 5 引入了革命性的面向對象重寫(Zend Engine 2),引入 Java/C++ 風格的對象模型。本文為「初探 PHP 5」系列第一部分,詳細講解新對象模型、構造/析構函數、引用語義、克隆、可見性控制、接口與抽象類等核心特性。

1. 新對象模型:引用語義與句柄機制

PHP 4 中對象賦值/傳參默認複製(值語義),需显式 & 才能引用。PHP 5 對象默認按引用傳遞,底層採用「對象存儲 + 句柄」機制:

  • 對象實體存放於全局 Object Store,每個對象有唯一 Handle ID。
  • 變量持有的是 Handle,賦值/傳參僅複製 Handle,不複製對象體。
  • 效果:$obj2 = $obj1 兩者指向同一實例,修改屬性相互影響。
  • 優勢:內存效率高、避免不必要複製、支撐複雜對象圖。

2. 構造函數 __construct 與析構函數 __destruct

class Foo {
    public $x;
    public function __construct($x) { $this->x = $x; }
    public function __destruct() { echo "bye bye"; }
}
$o = new Foo(4); // 輸出 4,腳本結束前輸出 "bye bye"
  • 統一命名解決 PHP 4 同名函數作構造函數的混淆。
  • 析構函數在對象無引用或腳本結束時自動調用,釋放資源(關閉連接、寫緩存等)。
  • 繼承時子類需显式調用 parent::__construct()。

3. 對象克隆 __clone()

因引用語義,需深拷貝時使用 $copy = $obj->__clone()。可在類中實現 __clone() 魔術方法自定義拷貝邏輯(如複製關聯對象、重置 ID)。

4. 可見性控制:public / protected / private

修飾符類內子類外部
public✓✓✓
protected✓✓✗
private✓✗✗

最佳實踐:屬性默認 private,通過 getter/setter 暴露;內部協作用 protected;API 用 public。

5. 接口 interface 與 implements

interface Displayable { public function display(); }
interface Printable { public function doPrint(); }
class Report implements Displayable, Printable { /* 實現兩方法 */ }
  • 接口定義契約,不含實現代碼。
  • 類可實現多個接口,實現「多重繼承」效果。
  • 提升代碼可讀性、解耦、便於多態替換。

6. 抽象類 abstract class

  • 不可實例化,可包含抽象方法(無方法體)與具體方法。
  • 子類必須實現所有抽象方法才能實例化。
  • 適用於定義通用模板、強制規範子類行為。

系列導航

  • 本文(上):對象模型、構造/析構、引用、克隆、可見性、接口、抽象類
  • 下篇:__call 重載、__set/__get、類型提示、靜態成員、異常處理、命名空間
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved