🦅

【PHP】Traitって何?ポケモンで整理してみた。

2024/07/25に公開

はじめに

PHPを学習しているのだが、Traitというものが出てきたので整理してイメージ化してみた。

この記事でわかること

  1. トレイトって何?
  2. トレイトの使い道
  3. どんなときに便利?

トレイトって何?

簡単にいうと再利用可能なコードをまとめたものです。
つまり、複数のクラスでメソッドやプロパティを使いまわしたいときに使う機能のことです。
ん?それは継承でいいのでは?と思った方もいるのではないのでしょうか。
それではできないケースもあるのです。
例えば以下のようなケースです。

【参考文献:独習PHP第4版】

動物で話を進めてみます。
動物には飛べる動物とそうでない動物があります。
そのため、親クラスには飛べるメソッドを用意してしまっては飛べない動物にも飛べるメソッドを実装しなければなりません。
そこで活躍するのがTraitです。
TraitとしてFlyTraitを用意しておき、そこに飛べる動物特有のプロパティやメソッドをまとめておきます。
例えば羽や飛ぶや上昇・下降などですね。
これを鳥類のクラスから導入してしまって、それ以降のクラスで継承してしまえば、困ることはありませんね?
このように親クラスからの継承では不都合な事象を避けることができるのがTraitという機能なのです。

トレイトの使い道

別の例でもっとトレイトの便利さを感じてみましょう。
今回はポケモンを使って例えてみます。


お馴染みのヒトカゲがいます。
ヒトカゲはひこうタイプではありません。
ですが進化するとリザードンとなりひこうタイプが追加されます。
この場合、リザードンはヒトカゲを継承することになるのですが、継承するだけではひこうタイプは実装されていません。
そこで、外部に用意しているTraitを使ってみます。
このTraitは、ひこうタイプ専用のTraitで、ポケモンが覚えるであろうメソッドが詰まっています。
・プロパティ:ひこう
・メソッド:そらをとぶ
が用意されています。
こうすることで、リザードンからひこうタイプの技を覚えることができるようになるのです。

どんなときに便利?

上記以外にも、このTraitは、他のひこうタイプのポケモンにも再利用することができます。例えばポッポとか。
このようにプロパティやメソッドを外だししていれば、必要なタイミングで使うだけでコードを組むことができます。

あと、全てのひこうタイプのポケモンに対してプロパティやメソッドを書いてしまった場合、改修する際にすべてを修正しなくてはなりませんが、現在のポケモンは1000匹ほどはいるらしいので、全てを確認するのは現実的ではないですよね。Traitを使っていれば、そのTraitだけを直せばいいだけなので、そうしたコードの保守性を保つためにもTraitを使うのは有効な手段だと言えます。

おわりに

以上、今回はポケモンを使った具体例をもとにTraitを整理してみましたがいかがでしたでしょうか。少しでも皆様のお力になれたのであれば幸いです。

Discussion