PHPでmixinsっぽいこととか

Ruby-style mixins in PHP
へぇー。

別にこういう形でもよさげだけどどうなんだろ。
確か、MDB2のload_module とか CakePHPでも似たような箇所がある気がする。
(ってかそのへんを参考にした)

個人的にも最近この手のやりかたを複数のテーブルクラス(Model)に同じような機能を持たせたい・・・例えば、createdという作成日時フィールドに対し、年ごと、月ごとなどで検索する機能とか・・・場合に利用してたりしますよ。

[php]<?php class Test { var $name; var $mixins = array(); function __call($func, $args) { foreach ($this->mixins as $row) { if (method_exists($row, $func)) { return call_user_func_array(array($row,$func), $args); } } } function mixin($obj) { $obj->o = $this; $this->mixins[] = $obj; } }

class Auau { var $o; function hello() { $o = $this->o; echo "hello,{$o->name}\n"; } function goodby() { $o = $this->o; echo "goodby, {$o->name}\n"; } }

$test = new Test(); $test->name = 'Taro'; $test->mixin(new Auau()); $test->hello(); $test->goodby();[/php]
なんかデザパタにありそうだな、こういうの。
ともかく、メソッドでぼつぼつ追加するより、クラス(インスタンス)単位でごっそり機能追加ができたほうがラクそうな気がするんだが。