2008/3/30 日曜日

PHPでmixinsっぽいこととか

Filed under: 技術メモ — dev0000 @ 3:42:22 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

Ruby-style mixins in PHP
へぇー。

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

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

PHP:
  1. <?php
  2. class Test {
  3.     var $name;
  4.     var $mixins = array();
  5.     function __call($func, $args) {
  6.         foreach ($this->mixins as $row) {
  7.             if (method_exists($row, $func)) {
  8.                 return call_user_func_array(array($row,$func), $args);
  9.             }
  10.         }
  11.     }
  12.     function mixin($obj) {
  13.         $obj->o = $this;
  14.         $this->mixins[] = $obj;
  15.     }
  16. }
  17.  
  18. class Auau {
  19.     var $o;
  20.     function hello() {
  21.         $o = $this->o;
  22.         echo "hello,{$o->name}\n";
  23.     }
  24.     function goodby() {
  25.         $o = $this->o;
  26.         echo "goodby, {$o->name}\n";
  27.     }
  28. }
  29.  
  30. $test = new Test();
  31. $test->name = 'Taro';
  32. $test->mixin(new Auau());
  33. $test->hello();
  34. $test->goodby();

なんかデザパタにありそうだな、こういうの。
ともかく、メソッドでぼつぼつ追加するより、クラス(インスタンス)単位でごっそり機能追加ができたほうがラクそうな気がするんだが。

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする

HTML convert time: 0.486 sec. Powered by WordPress ME