クラス生成の仕組みをつくるしかないっすね

Hawkさんがコメントされているとおり、PHP4の標準関数をさらっとつかうだけではAOPはできそうにない。(やっぱり邪魔をするPHP4の参照渡し・・・)

なので、クラス定義をパースして、別のクラスを作り出す仕組みをつくっちゃうしかないかと。もちろん毎回毎回そんなことをしていたらパフォーマンスがおちるので、キャッシュの仕組みも込みで。

やりたいことは以下のこと。

  1. クラス定義をパースして変数、関数を取り出したiniファイルを出力する。
  2. 関数は引数の数だけではなくて、引数が値渡しか参照渡しかを取得できるようにする。(ここがPHP4標準の機能ではできそうにない。できるぞ!という方、ツッコミを・・・)
  3. iniファイルを元にクラスファイルを生成する。
  4. 元のクラスファイルもしくはiniファイルのタイムスタンプをみて再生成する。
  5. 簡単なパターン(例えばgetter/setter)であれば、関数の中身も生成する。
  6. 元のクラスに対して、関数の追加(Mix-in)を可能とする。
  7. 任意の関数(Pointcut)にAdviceを仕掛けれるようにする。(AOPするってことですね。もちろんこれが最終目標)

(1)に関して、変数は標準関数で簡単に取り出せるが、関数の方がやっかい。なにが厄介かというと、関数名は簡単に取れるが、引数の情報は外部からはとれない。関数内部に仕込めば取れそうだが邪魔する参照渡し・・・PHP5ならばリフレクションでできるのかな?

パースはおそらく無視できない負荷になるだろうから、キャッシュして必要なときに再生成する仕組み(4)がいるだろう。

(6)に関しては、あったら便利だろうなーってことで追加。継承でも委譲でもないMix-inという選択肢があるってのはPHPのプログラミングの幅がひろがるんではないかと。

中間のiniファイルはいらなくなるかもしれませんね。ただし、もともと実態のないクラスに対して、iniファイル(もしくはiniファイルを読み込んだイメージの連想配列)を元に別クラスをつくるというのもありかなと思ってたりもする。

これができれば、S2Daoをもってきたり、テンプレートエンジン作成でも強力な武器になりそうなので、がんばって作ってみるか。

破綻してますよ!とか、既にありますよ!とかというツッコミはガンガンください。上記のものはあまり深く考えての結論ではないので・・・しばらくの間、このトピックで日記を進めることにします。(プレゼンテーション層はしばらく保留)