PHP で Mixin したい!
「アナタに Mixin されたい」とかタイトル書こうとしたけれど、なんか変な連想されそうだったので却下。
PHP って Ruby と同じで多重継承ができないけれど、Ruby とは違って Mixin の機能がないので、適当に繕ってみようかなー。
という動機で作ってみました。
あとは、get_class_vars( ) とかを使って、プロパティにもアクセスできるようにすればいい感じ?
とか思っていたら、似たような構造で Mixin 機能を作っている方がたくさんいらっしゃったので、ひっそりと折りたたみ。
で、実際に使ってみたら、使い方がいろいろあって、いったい何を作ったのか分からなくなりました。
- 継承してクラスをつくる
<?php class MixinClass extends Mixin function __construct ( ) { parent::__construct( array('Class1', 'Class2', 'Class3') ); /* 以下のようにもかけます * parent::__construct( array( * new Class1( ), * new Class2($foo, $bar), * new Class3($hoge, $fuga, $puge), * ) ); */ } }
これで、MixinClass から Class{1, 2, 3} の function が呼び出せるようになります。(本来目的としていた機能)
- そもそも Mixin クラスを new してしまう
<?php $obj = new Mixin( array( new Class1($args), new Class2($args), new Class3($args), ) );
こうすると、$obj が Class{1, 2, 3} の機能を持ったオブジェクトとして利用できる。(予定外)
こうなることは当然といえば当然だけれども、なんか「予定外の使い方の方が使い勝手が良い」というジレンマに陥ったんですけど。
えーっと、とりあえず。。。わーい。