Zend_Registry について

via noopな日々

確かに、global変数にほいほい入れてしまうよりはマシなんだけど。そうは言っても、≒グローバルなZend_Registryを多用するのは避けた方がいいと思う。Zend_Registryが絶対ダメというわけじゃなくて、適材適所ってことで。

Zend_Registryの多用には要注意 - noopな日々

これは激しく同意。 Zend_Registry はスコープがでかすぎるので使っていない。
たとえば良くあるケースだと、ブートストラップとかで読み込んだ設定値を持ち回したいとかに使用する事が多いと思う。
せめてリードオンリーなオプションがあれば、値が上書きされる危険がないんだろうけど、そういうオプションはソースを読んでも見つけられなかった。


じゃあどうやって持ち回すかの結論が自分の中で出ていない。

<?php
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory('/path/to/direcotry')
           ->setParam('config', 'fuga');

現状 Zend_Controller_Front に格納してコントローラで取得できるようにしているが、これだってコントローラで以下のようにすれば上書きできる。

<?php
// Zend_Controller_Front::getInstance(); でも同じ
$front = $this->getFrontController();
// fuga と表示
var_dump($front->getParam('config');
// hoge という文字列で上書き
$front->setParam('config', 'hoge');
// hoge と表示
var_dump($front->getParam('config');

Zend_Registry よりは上書きする手間がかかるから、触りにくいというだけ。
どうしたもんか。