多型允許以統一介面操作不同具體類別物件。呼叫端只依賴抽象 (介面/基類),不需知道具體實作類別,實現開放封閉原則 (OCP)。
static:: 解決靜態方法繼承問題addFeedback('Great!', 'Reader', date('Y-m-d'));
break;
case 'Charles':
$person->feedback[] = ['Reader', 'Great editing!'];
break;
case 'Alejandro':
$person->feedback->append('Awesome!');
break;
}
缺點:新增類別需修改 switch、違反 OCP、耦合具體類別。
feedbacks[] = compact('comment', 'sender', 'date');
}
public function getFeedbacks(): array {
return $this->feedbacks;
}
}
feedbacks[] = "{$date} | {$sender} | {$comment}";
}
}
new David(),
'Charles' => new Charles(),
default => new AnonymousPerson(),
};
}
}
// 呼叫端完全不需要知道具體類別
$person = PersonFactory::create($_SESSION['name']);
$person->addFeedback('Great Article!', 'Some Reader', date('Y-m-d'));
若回饋處理邏輯頻繁變動,可提取為獨立策略介面:
strategy->process($this, $comment, $sender, $date);
}
}
readonly 屬性、enum、match 表達式#[Attribute] 替代註解式中繼資料static、mixed、never多型是物件導向設計核心。PHP 5 奠基介面/抽象類別,PHP 7+ 型別系統成熟,PHP 8+ 語法糖豐富。善用介面隔離、依賴反轉、策略模式,打造高內聚低耦合系統。