在面向對象程式設計(OOP)中,抽象方法是指只有方法宣告、沒有方法主體(即無大括號及內部實現)的方法。宣告時需在方法名後直接加分號結束,並使用 abstract 關鍵字修飾。
只要一個類中至少包含一個抽象方法,該類就必須宣告為抽象類(同樣需用 abstract 修飾)。抽象類的核心特徵:
| 規則 | 說明 |
|---|---|
| 關鍵字 | abstract |
| 抽象方法 | 無 { } 主體,以分號結束 |
| 抽象類 | 至少一個抽象方法 |
| 實例化 | 抽象類不可直接 new |
| 繼承義務 | 子類必須實現所有抽象方法 |
<?php
abstract class User {
// 抽象方法:強制子類實現
abstract protected function getUser();
// 普通方法:提供共用邏輯
public function print_content() {
print $this->getUser();
}
}
class VipUser extends User {
protected function getUser() {
return "抽象類與抽象方法範例";
}
}
$user = new VipUser();
$user->print_content(); // 輸出:抽象類與抽象方法範例
?>
PHP 5.1 起支援靜態抽象方法,實現時也必須宣告為 static:
<?php
abstract class User {
protected static $sal = 0;
static abstract function getSal();
static abstract function setSal($sal);
}
class VipUser extends User {
static function getSal() {
return self::$sal;
}
static function setSal($sal) {
self::$sal = $sal;
}
}
VipUser::setSal(100);
echo "你的薪資是:" . VipUser::getSal(); // 輸出:你的薪資是:100
?>
public/protected)在子類中實現時,可見性不能比父類更嚴格interface)與抽象類的區別:介面全為抽象方法,抽象類可包含實現邏輯當你需要定義一組相關類的通用契約,同時提供部分共用實現時,抽象類是最佳選擇。典型場景包括:模板方法模式、資料庫驅動基類、支付閘道基類等。