多態性允許以統一接口操作不同具體類型的對象,代碼僅依賴基類/介面契約,不關心具體實現。是設計模式靈活性的核心基石。
// 非多態:需判斷具體類型
switch (get_class($person)) {
case 'David': $person->addFeedback(...); break;
case 'Charles': $person->feedback[] = ...; break;
}
// 多態:統一調用基類方法
$person->addFeedback('Great!', 'Reader', date('Y-m-d'));
interface Person { function addFeedback(...); }abstract class Person { abstract protected function load(); }PHP 5 早期版本不支持遲綁定:基類方法中調用 $this->method() 時,若 method 僅在子類定義,會報錯「方法不存在」。示例:
class Person {
function addFeedback($arr) { $this->parseFeedback($arr); } // 基類無 parseFeedback
}
class David extends Person {
function parseFeedback($arr) { /* ... */ }
}
// 運行時報錯
此限制阻礙了模板方法模式等高級 OO 模式在 PHP 5 中的自然實現,需通過設計規避(如將可變部分提升為抽象方法強制實現)。
PHP 5 通過介面與抽象類提供了基礎多態支持,但遲綁定缺失限制了框架級設計的靈活性。後續版本(PHP 5.3+)已引入 static:: 晚靜態綁定部分緩解此問題。