- 「mix-inは必要」
- 「そのための多重継承は必要(悪)」
サンプルソースはここから拝借。
http://simas.posterous.com/new-to-php-54-traits
trait??トレイト???辞書を引くと「特徴」という意味らしい。trait Singleton {
public static function getInstance() { ... }
}
class A {
use Singleton;
// ...}
class B extends ArrayObject {
use Singleton;
// ...}
// Singleton method is now available for both classesA::getInstance();
うーん。また気持ち悪い英単語を持ってきましたね。苦肉の策って感じです。
PHPの機能拡張に置ける伝統的なセンスとして
- 配列でなんとかする。call_user_funcでのオブジェクトメソッド呼び出しとか。
- 文字列で渡す。クロージャっぽい事をやるときとか。
- 予約語を1個づつ増やす。今回のコレ。
例えば、こうは出来なかったのか?(1)
mixin class A {}
class B {
mixin use A;
}
理想をいえば、こうですね。(2)
class B extends A uses XC,XD implements IE,IF {}
「定義の内側に、何かを加えて何とかする」感はperlのOOPを思い出します。ただしperlは、サードパーティライブラリなので、本体を改造できないのはともかく、開発元のはずのZendがやるってのに、こんな手抜き感実装ってどうなの?