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

PHP 多態機制實作範例:介面與依賴注入

     編輯:PHP 相關知識

PHP 多態機制實作範例:介面與依賴注入

多態讓相同介面的不同實作類別能在運行期互換。PHP 中透過介面或抽象類別定義契約,再將具體實作物件注入消費者,即可實現多態。本文提供最小化可執行範例。

核心概念

  • 介面:定義方法簽名,不含實作。
  • 實作類別:實現介面所有方法。
  • 消費者:依賴介面型別而非具體類別,透過參數接收物件(依賴注入)。

完整範例

<?php
// 1. 定義介面契約
interface Person {
    public function getName();
    public function getAge();
}

// 2. 實作類別 A
class Phper implements Person {
    public function getName() { echo 'this is php\'s getName'; }
    public function getAge()  { echo 'this is php\'s getAge'; }
}

// 3. 實作類別 B
class Javaer implements Person {
    public function getName() { echo 'this is java\'s getName'; }
    public function getAge()  { echo 'this is java\'s getAge'; }
}

// 4. 消費者:依賴介面 Person
class MyService {
    public function process(Person $obj) { // 型別提示強制傳入實作 Person 的物件
        $obj->getName();
        echo "<br>";
        $obj->getAge();
    }
}

// 5. 運行時注入不同實作
$php   = new Phper();
$java  = new Javaer();
$service = new MyService();

$service->process($php);  // 輸出 Phper 邏輯
$service->process($java); // 輸出 Javaer 邏輯
?>

多態的價值

  • 解耦:MyService 不依賴具體類別,易於擴充新實作(如 Goer、Pythoner)無需修改服務代碼。
  • 可測試性:單元測試時可注入 Mock 物件。
  • 符合開閉原則:對擴充開放,對修改關閉。

實務補充

實際專案中常搭配依賴注入容器(如 PHP-DI、Symfony DI、Laravel Service Container)自動解析注入,進一步降低耦合度。多態是 SOLID 原則中「介面隔離」與「依賴反轉」的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved