2010年5月14日金曜日

PHPでメタプログラミングの最初の一歩は__callから?

__callはRubyでいうMethod Missingかしら

PHPにはいくつかマジックメソッドがあって、そのうちの一つが__call。__get __setはYzwでほんのちょっぴり使いました。

__callって遅いらしい。でもさっき試した範囲では別に劇的に遅いとは感じなかったです。むしろ__callを使ってメタプログラミングしといて、スピードが求められる時にコードを書いてしまえばいいんじゃないかと思います。最適化ってやつです。

メタプログラミングの一歩手前?

最近モデル名とデータベースのテーブル名に規約をもたせててるのと、それぞれのテーブルからデータを取り出すクラスを親クラスから派生させて作っているので、findByIdを親クラスで定義して子クラスの名前からテーブルを割り出して該当するレコードを返すというメソッドを書きました。findById以外も書いたんですが、そのおかげで8つの子クラスからメソッドが消えて親クラスのメソッド1つに集約することができました。まだまだクラスが増えていく予定なので実装してよかったと思った部分なので、さらにメタプログラミングに磨きをかけて、コードを書く量を減らして効率化を計ろうと考え中!

でもあれですね。やっぱりPHP5.3がいい。PHP5.3ならActiveRecordとかORM系ライブラリがもっと充実してくるんじゃないかと思います。

0 件のコメント: