0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

traitが有効な場面とその理由を深掘りする

Posted at

はじめに

PHPで共通処理を複数のクラスに持たせたいとき、インターフェースを抽象クラスで実装すること以外に、traitを使うということを学んだ。
この記事では、その理解の過程を整理する。


traitは「処理の再利用」のための道具

  • 抽象クラス → 「共通の型・構造をもつクラスを継承させる」ためのもの
  • trait → 「特定の処理だけを、クラスに柔軟に注入する」ためのもの

共通のインターフェースやプロパティをもたせたいなら抽象クラス
単に関数の中身を再利用したいだけなら traitがベスト


インターフェース+抽象クラス と trait の違い

たとえば、

  • 複数のクラスで render() メソッドを使いたい
  • 全部同じ実装になる
  • それなら、interface + 抽象クラスで共通実装を提供すればよさそう

これで「共通実装」も「共通の型」も成立する。
でも抽象クラスには制限がある。

それは、PHPはクラスの多重継承ができない。

class A extends B, C // ❌ 不可能

つまり、共通処理をいくつも継承させることはできない。

そこで、trait の出番。
trait は一つのクラスに複数入れ混むことができる。

trait を使うべき場面は?

  • 共通処理を複数のクラスに持たせたい。
  • 共通の状態や型(プロパティ・親クラス)は不要。
  • オーバーライドもしない。
  • 必要があれば複数の共通処理を組み合わせたい

→ これらを満たすのが trait の強み


おわりに

インターフェースを抽象クラスで実装することの限界を理解した。
でも、trait を使えば、その限界を突破できる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?