Zend_Registryとは、一言で言うとまああれだ、グローバル変数。
クラス内とかメソッド内とかスコープを気にせず好きなところでZend_Registry::set('hoge', 'fuga');ってやって、それ以降の好きなところでZend_Registry::get('hoge');ってすると'fuga'を取得できます。
使いどころは何処かというと、スクリプトのパスやデータベースのパスワード等、最初に定義したら以後変更する必要のないものとなります。
大抵そういうのはdefine()で定義していると思いますが、define()は配列やオブジェクトを入れられないという欠点があります。
その点Zend_Registryは配列やオブジェクトをそのまま突っ込むことができるので、使い回しが格段に楽になります。
ただZend_Registryはsetで簡単に上書き可能なため、結局はグローバル変数を使用するのと同じ危険性をはらんでいます。
気がつかないところで上書きされるとエラーの温床になるので、運用にはルールを義務づけるとよいでしょう。
実は、$_REQUESTあたりのスーパーグローバル変数に値を突っ込むとクラスとかスコープとかを完全に無視してどこからでも読むことができるので、完全にZend_Registryの代用になったりするのですが秘密です。
まあ、そういう行儀の悪いことをしてはいけません。
クラス内とかメソッド内とかスコープを気にせず好きなところでZend_Registry::set('hoge', 'fuga');ってやって、それ以降の好きなところでZend_Registry::get('hoge');ってすると'fuga'を取得できます。
使いどころは何処かというと、スクリプトのパスやデータベースのパスワード等、最初に定義したら以後変更する必要のないものとなります。
大抵そういうのはdefine()で定義していると思いますが、define()は配列やオブジェクトを入れられないという欠点があります。
その点Zend_Registryは配列やオブジェクトをそのまま突っ込むことができるので、使い回しが格段に楽になります。
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); Zend_Registry::set('link', $link);とすると、以後はDBに接続する必要があればZend_Registry::get('link')でDB接続オブジェクトをシングルトン的に取得できます。
ただZend_Registryはsetで簡単に上書き可能なため、結局はグローバル変数を使用するのと同じ危険性をはらんでいます。
気がつかないところで上書きされるとエラーの温床になるので、運用にはルールを義務づけるとよいでしょう。
実は、$_REQUESTあたりのスーパーグローバル変数に値を突っ込むとクラスとかスコープとかを完全に無視してどこからでも読むことができるので、完全にZend_Registryの代用になったりするのですが秘密です。
まあ、そういう行儀の悪いことをしてはいけません。
PR
トラックバック
トラックバックURL: