大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

【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

関数の引数リストを配列として返す。

 

 

参考

素晴らしい記事に感謝いたします。

ヘルパ 5.5 Laravel

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