General

Jeans CMSのコードを、PHP5.3以上で記述することについて

2014年10月21日

Jeans CMS ver 1.0.0を公開した。このバージョンは、PHP5.2で使える、最後の正式バージョンになる可能性がある。ざっとコードを見わたした限り、PHP5.3に移行すると、次に述べるような点で、コードがすっきりするようだ。ただし、これらの優位性を鑑みてPHP5.3に移行する方がよいのか、PHP5.2での互換性を保っておいた方がよいのか、難しいところではある。

1)遅延静的束縛 (Late Static Bindings) の使用

Jeans CMSでは、クラスのスタティックなメソッド呼び出しが多用されており、オブジェクトはほとんど形成されない(一部、例外あり;PDO-SQLiteと、プラグインオプション)。規約では、個々のプラグインのクラス(jp_xxxx)はすべてpluginクラスを継承して静的に作成される。

プラグインクラスでは、必要な場合、メソッドをオーバーライドして用いる。その際、"self::"の挙動がクラスインスタンス内での"$this->"の挙動と異なる。具体的には、pluginクラス(プラグインの親クラス)内で"self::"を用いた際、継承先でオーバーライドしたメソッドは呼び出されず、元のpluginクラス内のメソッドが呼び出されてしまう。これを解決するのが、PHP5.3で用意された機能、"static::"で、pluginクラス内での記述で"static::"を用いれば、継承先のプラグインからこのコードが呼び出された場合に、継承先のプラグインのメソッドを呼び出すことが出来る。

改めて、plugin.phpのコードを見直してみたが、"static::"を使わずにこの辺りのことを実装するために、プラグインクラスを最初に呼び出したときに、いくらかの初期化コードが実行されるようになっている。"static::"を利用すれば、これらの初期化コードを実行する必要がないから、スピードアップが図れることになる。

2)名前空間

名前空間を使うことにより、Jeans CMSと他のツールと共存することが可能になると思われる。ただし、__autoload()関数は、グローバル空間に書かなければならないようで、他のツールと共存させることは出来ないようだ。ただし、__autoload()関数内で、呼び出し元のコードがどのディレクトリに存在しているかを捜査することで、Jeansの__autoloadなのか、他のツールの__autoloadなのかを判断することは出来るだろうと思われる。

3)クロージャ

viewクラスで、create_function()が使われている。この部分をPHP5.3のクロージャに置き換えることで、安定した動作が見込まれる。また、イベントの実装でクロージャを用いれば、色々と便利になる場面が出てくることが、予想できる。

コメント

コメントはありません

コメント送信