こんにちは、株式会社スマレジのエンジニアのyushiです。
今日は、TraitとHelperの使い分けを考えます。
TraitとHelpers
PHPやLaravelで開発していると、関数単位で機能を共通化したくなるときがあります。
このときに使えるのがTraitとHelpersという仕組みです。
この使い分けを考えます。
Traitとは
これはPHPの標準の仕組みです。
クラスのように、trait {TraitName}
と共有したいメソッドを定義します。
あとは各クラス内でuse {TraitName}
としてあげるだけで、このTraitで定義したメソッドを使う事ができます。
Laravelでも様々なところで使われています。
例えば、SoftDeletes。
Helpers
これは、composerのautoloadingという仕組みを使う方法です。
LaravelにはHelpersという仕組みがありますが(https://laravel.com/docs/6.x/helpers)、これはcomposer.jsonに下記の記述がある事でどこからでも関数が呼べるのです。
- https://github.com/laravel/framework/blob/6.x/composer.json#L95
- https://github.com/laravel/framework/blob/6.x/composer.json#L96
同様の方法で、自作のヘルパー関数を定義する方法が一般的に利用されます。
TraitとHelperをどう使い分けるか
TraitとHelpersの使い分けを考える時の要点は、下記比較だと思います。
Trait
- いちいちuseを書く必要がある
- クラスじゃない場所では使えない(bladeの中など)
Helpers
- 定義したメソッドをどこでも使える
- その分、整理・把握が大変
以上のことから、方針
Helperを使う場合
- クラス外の場合(blade, config, ...)
- 使用頻度がとても高い・多くのファイルで共通して使う場合
Traitを使う場合 = 上記以外