coreを基底クラスに?
2008年2月17日
coreクラスは、config.phpをインクルードしたときに一番初めに定義されるクラスだ。今、このcoreクラスをすべてのクラスの基底クラスにするかどうかで悩んでいる。
例えば、プラグインで文字出力を行う場合、現在の仕様では
のように記述するが、coreクラスを基底クラスとしてプラグインクラスを作成すると、
のように記述してもよいし、
のように記述することもできる。PHP5ではメソッドのオーバーライドができないように設定できるから、プラグインでpメソッドやechohtmlメソッドを書き換えて変なことをするのも禁止できる。
もう一つ悩んでいることは、データベース接続にPDOを利用するかどうか。PDOではプリペアードステートメントが使えるし、これはうまく使えばスピードアップすることもできるらしい。ただ、SQLiteのBEGINとCOMMITのように、スピードを考えたときにうまく行かない部分もあるだろうから、まだまだ考える余地はある。ベータ版を出すまでに決定すればよいだろう。
例えば、プラグインで文字出力を行う場合、現在の仕様では
core::p($text); core:echohtml('<p>id: <%1%></p>',$id);
のように記述するが、coreクラスを基底クラスとしてプラグインクラスを作成すると、
$this->p($text); $this->echohtml('<p>id: <%1%></p>',$id);
のように記述してもよいし、
self::p($text);
のように記述することもできる。PHP5ではメソッドのオーバーライドができないように設定できるから、プラグインでpメソッドやechohtmlメソッドを書き換えて変なことをするのも禁止できる。
もう一つ悩んでいることは、データベース接続にPDOを利用するかどうか。PDOではプリペアードステートメントが使えるし、これはうまく使えばスピードアップすることもできるらしい。ただ、SQLiteのBEGINとCOMMITのように、スピードを考えたときにうまく行かない部分もあるだろうから、まだまだ考える余地はある。ベータ版を出すまでに決定すればよいだろう。
コメント
Andy (2008年2月17日 22:16:36)
共通関数などはinterfaceを使って使えるようにするという考えもあると思います。
Kat (2008年2月18日 00:04:57)
えっと、そのあたりまだ良く分かっていないんですけれど、どのように使えばよいのでしょうか?プラグインクラスだと、例えばgetNameは必ず実装するように強制するとか、そんな風に使うのだと思っていました。
Andy (2008年2月19日 01:23:56)
ごめんなさい。なんだかinterfaceの機能を勘違いしていました。最近はRuby頭になっていてPHPを忘れてしまったもので(^^;
Rubyだとmoduleで実装した関数をクラスにincludeできるのですが,PHPのインタフェースだと実装はそのクラスの中にしないとだめですね。
Rubyだとmoduleで実装した関数をクラスにincludeできるのですが,PHPのインタフェースだと実装はそのクラスの中にしないとだめですね。
Kat (2008年2月19日 10:52:36)
Ruby、今勉強中ですが、そのあたりの機能はたくさんあるようですね。
PHPの場合だと、NucleusのBaseActionsクラスのようなものを作って継承するのが普通という事でしょうか。
上記の件、まだ検討中です。coreクラスのうち、サニタイズ系の共通メソッドを別クラスにして、それをすべてのクラスの基底にするなども考えています。
PHPの場合だと、NucleusのBaseActionsクラスのようなものを作って継承するのが普通という事でしょうか。
上記の件、まだ検討中です。coreクラスのうち、サニタイズ系の共通メソッドを別クラスにして、それをすべてのクラスの基底にするなども考えています。