多態讓相同介面的不同實作類別能在運行期互換。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)無需修改服務代碼。實際專案中常搭配依賴注入容器(如 PHP-DI、Symfony DI、Laravel Service Container)自動解析注入,進一步降低耦合度。多態是 SOLID 原則中「介面隔離」與「依賴反轉」的基石。