PHP初心者ですが、traitというものをちょこちょこ目にするんですが、
意味わからなかったので、簡単にまとめてみました。
trait(トレイト)
PHPバージョン5.4.0以降で使える、コードを再利用するための機能。
PHPでは多重継承ができないが、トレイトを使うことで多重継承のようなことができる。
トレイトの宣言
trait トレイト名{
// 処理
// メソッド、プロパティ、staticメンバを定義できる。
}
トレイトの使い方
class クラス名{
// 複数のトレイトを使用する場合は、カンマ区切りで書く
use /*トレイト名, トレイト名2*/;
}
use トレイト名とすれば、クラスを継承したときのようにトレイトのメンバを引き継ぐ事ができる。
●継承とトレイトを同時に使い、親クラスとトレイトの両方が持つ同名メンバを呼び出した場合。
親クラスで定義されているメンバより、トレイトで定義されているメンバが優先される。
●あるクラスが複数のトレイトを使い、それら複数のトレイトが持つ同名メンバを呼び出した場合。
Fatal Errorが発生して、処理が止まってしまう。
なので、下記の方法でどちらを使うかを定義しておく必要がある。
class クラス名{
use /*トレイト1, トレイト2*/ {
// 使用するトレイト名::メソッド名 insteadof 使用されないトレイト名 ※トレイト2を使う場合
トレイト2::メソッド名 insteadof トレイト1;
}
}