PHP: クラスの抽象化 – Manual
abstractはPHPのクラス宣言時につけることでそのクラスを抽象クラスとして扱うことを示します。抽象クラスはインスタンスにできず、抽象メソッドを定義することが可能なクラスです。
抽象という名が示す通り抽象クラスは子とも言える継承先、具体的なクラスを持つことが前提となっているクラスです。子のクラスの共通要素を抽出したクラスです。抽象クラスを用いることによって誤った実装を防ぎ、何を作るべきなのかをわかりやすくすることができます。
抽象メソッドは実体を持たず、子に実装を任せるメソッド、インタフェース中のメソッドと同じ動きをします。これをもちいることによって次の様に、共通部分のほぼ固定の動作は実装、個々の要素は任せることを強制、というコードを記述できます。
abstract class AbstractClass { // 拡張クラスにこのメソッドの定義を強制する abstract protected function getValue(); abstract protected function prefixValue($prefix); // 共通メソッド public function printOut() { print $this->getValue() . "\n"; } // プロパティ protected $hoge = 'hoge'; }
taritと違って継承先で定義を新たにすることが容易であり、interfaceと違ってプロパティを持てます。ただしあくまでクラスであり、1つのクラスで継承できる元のクラスは1つだけ、抽象化のパターンにきっちり載せて使うべき機能です。