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();
  }
}

参考