古庄親方の上級試験コラム#027 言語リファレンス トレイト

目次

トレイト

https://www.php.net/manual/ja/language.oop5.traits.php

PHPでは、コードを再利用する仕組みとして「トレイト」があります。
トレイトはクラスと同様に「プロパティ、メソッド」を書く事ができますが、トレイト自身をインスタンス化する事はできません。
PHP8より前のバージョンでは記述可能なアクセス権に制限がありましたが、PHP8以降は、すべてのアクセス権、抽象化されたメソッド、staticのすべてを書く事ができます。
定数は PHP8.2.0 以降、書く事ができるようになります(試験範囲対象外)。

トレイトは trait キーワードで宣言します。
使う時は、使用したいクラスの中で use キーワードで取り込みます。
複数のトレイトを使う時は、use キーワードを並べる他に、カンマ区切りでの指定もできます。

トレイトの優先順位

継承元クラス、継承元クラスでuseしたトレイト、継承先クラス、継承先クラスでuseしたトレイトという構成がある場合、優先順位は以下の通りになります。

  • 現在のクラスのメンバー
  • 自身のクラスでuseしたトレイトのメンバー
  • 継承元のクラスのメンバー
  • 継承元のクラスでuseしたトレイトのメンバー

衝突の解決

複数のトレイトを使う場合、「同じ名前のメンバーがある」可能性があります。
同じ名前のメンバーがあるトレイトをそのまま複数useするとfatal エラーになります。

この場合、 insteadof 演算子を使って「そのメンバーの名前は、どのトレイトを使うか」を指定するか、或いは as 演算子を使ってエイリアス(別名)を付ける事で回避することができます。

また、as 演算子でアクセス権の変更をする事もできます。

トレイトに組み込まれたトレイト

トレイトの中で、別のトレイトを use する事ができます。

このコラムに関連するコードはこちらになります
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/027.php

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次