【Laravel】bootTraitsメソッド
※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。
【目次】
背景
Laravelで出てくる「bootTraits()」がよく分からなかったので、記事にまとめてみます。
bootTraitsメソッド
bootTraitsメソッドとは?
自身に使われているtraitの一覧を取得します。
つまり、使用しているクラス内のTraitの中にある「boot + Traitのクラス名」メソッドに対して、処理を行うことができます。
コード
protected static function bootTraits()
{
$class = static::class;
foreach(class_users_recursive($class) as $trait) {
if(method_exists($class, $method = 'boot'.class_basename($trait))){
forward_static_call([$class, $method]);
}
}
}
用語
trait(トレイト)
コードを再利用するための機能。
traitは継承することなくメンバを他のクラスで使用することができます。traitにはメソッドやプロパティ、staticメンバを定義できます。
traitを利用するには、useでtrait名を指定します。複数のtraitを使用する場合は、trait名をカンマで区切ります。
class_uses_recursive関数
全サブクラスで使われているものも含め、クラス中で使用されているtraitを全て返します。
method_exists
クラスメソッドが存在するかどうかを確認する。
第一引数にオブジェクトのインスタンスもしくはクラス名、第二引数にメソッド名を指定する。
class_basename関数
指定されたクラス名から名前空間を除いた、クラス名だけを取得します。
forward_static_call
静的メソッドをコールする。
func_get_args
関数の引数リストを配列として返す。
参考
素晴らしい記事に感謝いたします。
https://www.php.net/manual/ja/function.method-exists.php
https://www.php.net/manual/ja/function.func-get-args.php
[Laravel] Eloquentモデルのイベントをフックする4つの方法 | Xzxzyzyz
【PHP入門】継承(extends)、トレイト(trait)を使いこなそう! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
https://www.php.net/manual/ja/function.forward-static-call.php