PHP 継承する際にプロパティの記載を強制する方法 abstractは使えない
疑問
やりたかったこと
抽象クラスとその子クラスがある。子クラスで定数の実装を忘れないためにabstractで記述しておきたい。
abstract class 抽象クラス { abstract const HOGE; } class 子クラス extends 抽象クラス { const HOGE = 'hoge'; }
しかし、これではエラーが出てしまう。
調査
- 「php abstract プロパティ」でググった。
- 結論、できないとのこと。
- 代わりの方法はあるか?
わかったこと
- プロパティは宣言したら値を入れなければならない。
- 関数は宣言しても空でいいので抽象化することができる。
- 下記のようにset関数とconstractを使って未記入を防ぐ
abstract class Father { public $name; abstract protected function setName(); // now every child class must declare this // function and thus declare the property public function __construct() { $this->setName(); } } class Son extends Father { protected function setName() { $this->name = "son"; } function __construct(){ parent::__construct(); } }