PHP5.4のtraitの使い道: クラス書く必要がないときはtrait書けばいいと思う

何かの処理を共通化するために抽象クラス書いて継承させるというのはよくやるやり方だけど、抽象クラスを継承させるのはtraitに比べて制限が大きい。というのも、クラスはひとつしか継承できないが、traitは何個でもクラスに適用できるからで、わざわざ制限の大きいほうを選ぶ理由が無ければtrait使えばいいよという話。これはクラスを継承させるよりもインターフェイス使ったほうがいいよーと言われる話と似ている。これもインターフェイスはクラスの継承と違っていくつもクラスに適用できるため。

PHP5.4から導入される予定のtraitってなんぞという人は、PHP5.4のtraitを使ったシングルトンパターン実装によるtrait入門 - id:anatooのブログを参照する。

どうしても抽象クラスを作って継承させたいという場合も、まずインターフェイスを定義してその抽象クラスがそのインターフェイスを実装したほうが柔軟であるので、抽象クラスひとつ作ってこれを継承するしか選択肢はないとするよりも好ましい場合が多いと思う。

PHP5.4 alpha1のtraitを試してみた限りだと、traitはだいぶ強力で、かつメソッド衝突問題を避けるための方策がきちんと取られているので、これを学ぶ前から使わないと決めるのは非常に勿体無い。処理をモジュール化するために抽象クラスを作りたくなったら、まずtraitを使う事を検証して、ダメだった時に抽象クラスを定義するぐらいの設計戦略をとると良い。まる。