浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

trait中の関数を差分プログラミングをする

 traitはクラス中に現れる共通のプロパティ、メソッドをまとめて記述するための仕組みです。コード中におけるその扱いは継承に似ています。継承を行った場合、スコープ定義演算子をもちいることによってコードをコピペせずにちょっとだけ処理を付け足すことが出来ます。

class ChildHoge extends ParentHoge
{
  public function __construct()
  {
    //親のコードの処理前に付け足す処理の部分
    parent::__construct();
    //親のコードの処理後に付け足す処理の部分
  }
}

 このように便利なスコープ定義演算子ですが、traitを指すことはできません。traitでこれに似たことをしたい時、名前の変換を行うことによって実現ができます。元のコードを別名として扱い、traitを読み込んだクラスで元々の名前のメソッドを実装することによってクラス外のふるまいを変えることなくちょっと付け足しただけの差分プログラミングができます。

class ChildHoge
{
  use FugaTrait {__construct as traitConstruct;}
  
  public function __construct()
  {
    //トレイトのコードの処理前に付け足す処理の部分
    $this->traitConstruct();
    //トレイトのコードの処理後に付け足す処理の部分
  }
}
  • この記事いいね! (0)