介面與抽象類是 PHP 物件導向設計的核心契約機制。本文系統整理其語法、規則、異同與實戰模式。
interfacepublic 抽象方法與常數(const)。abstract 關鍵字。implements 實作,可多重實作(逗號分隔)。<?php
interface Logger {
const LEVEL_DEBUG = 1;
public function log(string $message, int $level = self::LEVEL_DEBUG);
public function emergency(string $message);
}
?>
abstract classabstract)與具體方法、屬性、建構子。extends),但可同時 implements 多個介面。<?php
abstract class BaseLogger implements Logger {
protected string $prefix = '[APP]';
public function log(string $message, int $level = self::LEVEL_DEBUG) {
$this->write($this->format($message, $level));
}
abstract protected function write(string $formatted): void;
private function format(string $msg, int $level): string {
return "{$this->prefix} [L$level] $msg";
}
}
?>
| 模式 | 語法 | 說明 |
|---|---|---|
| 普通類實作介面 | class A implements I1, I2 | 需實作所有介面方法 |
| 抽象類實作介面 | abstract class A implements I1 | 可延遲實作給子類 |
| 繼承父類並實作介面 | class A extends Base implements I1, I2 | 單一繼承+多重實作 |
| 介面繼承介面 | interface I3 extends I1, I2 | 合併契約,實作類需滿足所有 |
Serializable、Countable、Logger。善用介面與抽象類,能建立低耦合、高內聚、易測試、易擴充的系統架構。