php4でもコンストラクタを__construct()と書く
先日、[http: //d.hatena.ne.jp/studio-m/20070428/1177772678:title=php5→php4な状況で困ること (1)] と題して、php4ではコンストラクタが__construct()で書けない云々と書きました。が、最近わりと名前を目にする機会が増えてきたphpのフレームワーク「CakePHP」では、この問題を解決していました。
平たく言うと、というかソースそのまま載せるとこんな感じ。
class Object { function Object() { $args = func_get_args(); if (method_exists($this, '__destruct')) { register_shutdown_function (array(&$this, '__destruct')); } call_user_func_array(array(&$this, '__construct'), $args); } } class Hoge extends Object { function __construct() { // コンストラクタの処理 } }
何のことはない、スーパークラスのコンストラクタから__constructを呼ぶようにしておいて、「サブクラスのコンストラクタは__construct()に書く」というルールを守っているだけです。コロンブスの卵ですね。これが思いつかなかった自分にがっかりです。必ずこのクラスを継承しなければいけないという縛りはありますが、フレームワークで開発する場合、実装するクラスは何らかのクラスを継承するのが基本になるので、これは面白い仕組みですね。
今までちゃんと見たことなかったけど、CakePHPかなり面白そうです。「Railsをphpに持ってきたらこうなりました」みたいな雰囲気がかなり強そう。ソースのタブがハードタブなのは気に入らないけどw
ただ、最近はあえてフレームワークに縛られない実装というのも大切だなと思い始めてるので、今後どうなっていくかは難しいところ。まぁ、両方やってみるしかないんですけどね。