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

PHP 多型(Polymorphism)核心概念與介面實作範例

     編輯:PHP 相關知識

什麼是多型?

多型意指「一個介面,多種實作」。同一操作作用於不同類別實例,產生不同執行結果。實務上可將不同子類別物件視為同一父類別/介面處理,屏蔽差異,寫出通用程式碼,靈活應對需求變更。

PHP 介面與多型範例

<?php
/**
 * 介面定義:規範必須實作的方法,不包含實作細節
 * 所有方法預設為 public
 */
interface Shape {
    public function draw();
}

/**
 * 三角形實作 Shape 介面
 */
class Triangle implements Shape {
    public function draw() {
        echo "Triangle::draw()\n";
    }
}

/**
 * 矩形實作 Shape 介面
 */
class Rectangle implements Shape {
    public function draw() {
        echo "Rectangle::draw()\n";
    }
}

/**
 * 通用繪圖測試類別:接受任何實作 Shape 介面的物件
 */
class TestPoly {
    public function drawNow(Shape $shape) {
        $shape->draw(); // 多型:具體行為由傳入物件決定
    }
}

// 客戶端程式碼
$test = new TestPoly();
$test->drawNow(new Triangle());   // 輸出: Triangle::draw()
$test->drawNow(new Rectangle());  // 輸出: Rectangle::draw()
?>

關鍵點解析

  1. 介面:定義契約,強制實作類別提供特定方法。
  2. implements:類別宣告實作介面,必須實作所有介面方法,否則報 Fatal Error。
  3. 型別提示:drawNow(Shape $shape) 限定參數必須實作 Shape 介面,編譯期檢查。
  4. 執行期綁定:實際呼叫哪個 draw() 由傳入物件的真實類別決定(動態綁定)。

多型的實務價值

  • 開放封閉原則:新增形狀(如 Circle)只需新增類別實作 Shape,無須修改 TestPoly 或客戶端程式碼。
  • 依賴倒置:高層模組(TestPoly)依賴抽象(Shape),不依賴具體類別。
  • 策略模式基礎:將演算法封裝於不同類別,執行時動態切換。

補充:多重介面實作

interface Loggable { public function log(); }
interface Serializable { public function serialize(); }

class MyClass implements Shape, Loggable, Serializable {
    public function draw() { /* ... */ }
    public function log() { /* ... */ }
    public function serialize() { /* ... */ }
}

PHP 支援單一類別實作多個介面,進一步增強設計彈性。

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