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

PHP 多態程式設計範例:從繼承覆寫到介面依賴的兩種實現方式

     編輯:PHP 綜合知識

多態定義

「只關心介面或基類,不關心具體實現類。同一類型,不同結果。」

方式一:繼承與方法覆寫

class Stu {
    public function showGrade() { echo "base class"; }
}
class XiaoMin extends Stu {
    public function showGrade() { echo "is son show 80"; }
}
class XiaoLi extends Stu {
    public function showGrade() { echo "is son show 60"; }
}

function doit($obj) {
    if (get_class($obj) != "Stu") { // 排除基類直接實例
        $obj->showGrade();
    }
}

doit(new XiaoLi());  // 輸出: is son show 60
doit(new XiaoMin()); // 輸出: is son show 80

特點: 基類定義標準,子類各自實現。但呼叫端仍需知曉具體子類型(new XiaoLi()),未完全面向介面程式設計。

方式二:介面與類型提示(真正的多態)

interface Animal {
    public function voice();
}
class Cat implements Animal {
    public function voice() { echo "miao~~~<br>"; }
}
class Dog implements Animal {
    public function voice() { echo "wang ~~~<br>"; }
}

function doVoice(Animal $obj) { // 參數型別限制為 Animal
    $obj->voice();
}

doVoice(new Dog()); // 輸出: wang ~~~
doVoice(new Cat()); // 輸出: miao~~~

核心差異:

  • doVoice(Animal $obj) 強制參數必須實作 Animal 介面
  • 呼叫端傳入 new Dog(),PHP 執行向上轉型,視為 Animal 型別
  • 實現「同一類型(Animal),不同結果(汪/喵)」

PHP 與 Java 的差異

Java 中寫法:Animal a = new Dog(); 顯式向上轉型。PHP 為弱型別語言,無編譯期型別檢查,透過 Animal $obj 型別提示在執行期驗證。

最佳實踐建議

  1. 定義清晰的介面契約
  2. 高層模組依賴介面,不依賴實現
  3. 使用 DI 容器管理實現類的實例化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved