プラグインのロード
Zend Framework の多くのコンポーネントはプラグイン方式を採用しており、
クラスのプレフィックスとクラスファイルへのパスを指定して動的に機能を読み込むことができます。
このファイルは
基本的な使用例次のようなディレクトリ構造とクラスファイル群の構成を考えてみましょう。 トップディレクトリと library ディレクトリは include_path に含まれているものとします。
では、プラグインローダーを作成してビューヘルパー群の場所を指定しましょう。
こうしておけば、クラス名のプレフィックスを除いた部分を指定するだけで ビューヘルパーをロードできるようになります。
クラスを読み込めたら、次はそのインスタンスを作成します。
Zend_Loader_PluginLoader には、 複数のプラグインの間でオブジェクトを共有する機能もあります。 その際にシングルトンインスタンスを作成する必要はありません。 この機能は、静的レジストリを用いて実現しています。 インスタンスを作成する際に、 コンストラクタの 2 番目のパラメータでレジストリを指定します。
プラグインのパスの操作先ほどのセクションの例では、プラグインローダーでパスを追加する方法を示しました。 では、すでに読み込まれているパスを調べたりそれを削除したりしたい場合は、 いったいどうすればいいのでしょうか?
プラグインの確認とクラス名の取得時には、プラグインクラスがロードされているかどうかを調べてから何かを行いたいこともあるでしょう。 isLoaded() は、プラグイン名を受け取ってその状態を返します。
プラグインのパフォーマンスの向上プラグインの読み込みは、非常に重い操作となりえます。 まず各プレフィックスについてループ処理をする必要があり、 各プレフィックス上のパスをすべて調べ、 期待通りのクラスに対応するファイルを探すという操作になるからです。 ファイルは存在するもののそこでクラスが定義されていないといった場合は PHP のエラースタックにエラーが追加されますが、 これもまた負荷のかかる操作です。 ここで問題となるのが「プラグイン機能の柔軟性を保ちつつ パフォーマンスも向上させるにはどうすればいいか?」ということです。 Zend_Loader_PluginLoader では、このような場合のためのオプトイン機能として ファイルインクルードキャッシュを提供しています。 これを有効にすると、インクルードに成功したすべてのファイルを含む 単一のファイルを作成します。起動ファイルからこれをコールできます。 この方式を使用すると、実運用サーバ上でのパフォーマンスが劇的に向上します。 Example #1 PluginLoader クラスのファイルインクルードキャッシュの使用法 クラスファイルのインクルードキャッシュを使用するには、 次のコードを起動ファイルに追加します。
もちろん、パスやファイル名は必要に応じて変更することになります。 このコードはできるだけ早い段階で実行されるようにしなければなりません。 そうすることで、プラグイン機構をもつコンポーネントが確実にキャッシュを使用できるようにします。 開発段階ではキャッシュを無効にしたいこともあるでしょう。 その方法のひとつとしては、ある設定項目を切り替えることで プラグインローダーがキャッシュするかしないかを指定するというものがあります。
これを使えば、コードを直接変更しなくても設定ファイルだけの変更だけですませることができます。
|