は、誰かが説明できますか?レジストリクラスの目的は何ですか?レジストリクラスは、MVCフレームワークで必要とされる理由
は、ライブラリをロードすることですか?レジストリの作成の背後にある一般的な考え方は何ですか?レジストリで扱うデータは何ですか?
は、誰かが説明できますか?レジストリクラスの目的は何ですか?レジストリクラスは、MVCフレームワークで必要とされる理由
は、ライブラリをロードすることですか?レジストリの作成の背後にある一般的な考え方は何ですか?レジストリで扱うデータは何ですか?
ストレートhttp://www.phppatterns.com/docs/design/the_registry
からレジストリは、グローバルメルトダウンを防ぐために貢献し、よく管理方法でグローバルデータを格納するためのメカニズムを提供します。
基本的に、レジストリは、アプリケーションのグローバル名前空間を汚染することなく、必要な変数/オブジェクトをグローバルスコープに格納する場所です。それはMVCそれ自体とは関係ありませんが、多くのMVCフレームワークもレジストリパターンを利用しています。
は、これは、1つの場所で店変数にあなたを可能にし、はあなたの変数を取得するために、複雑なルーチンや魔法のすべての種類に頼ることなく、別の場所でそれを取り出します。
あなたはZend_Navigationオブジェクトを作成し、ブートストラップでZend_Registryに保管たとえばZend Frameworkのを取ります。その後、あなたはコントローラや他のクラスのレジストリから簡単に検索できます。
レジストリクラス以上がよりようにデータ・ホルダー・オブジェクトローダ等です。コントローラのレジストリにデータを追加して、ビューから取得することができます。 少しの例です。
Class Registry
{
protected $data = array();
private $loadClasses;
public function getData($name){
return isset($this->data[$name])?$this->data[$name]:null;
}
public function setData($name,$value)
{
$this->data[$name] = $value;
}
public function addData($name,$value)
{
$this->data[$name][] = $value;
}
public function &singletonLoad($class)
{
if(isset($this->loadClasses[$class]))
{
return $this->loadClasses[$class] ;
}
if(class_exists($class))
{
return $this->loadClasses[$class] = new $class();
}else
{
return false;
}
}
}
class AController extends Controller
{
public function indexAction()
{
$this->registsry->setData('name','John') ;
}
}
class AView extends View
{
public function getName()
{
return $this->registsry->getData('name') ;
}
}
したがって、レジストリを静的に呼び出す必要がありますか?またはオブジェクトを介して? – Eli
ほとんどのレジストリ実装は実際には静的です。 'なZend_Registry ::取得()'と 'なZend_Registry ::セット()'例えば。 – ChrisR
はZendのは、それをしないという理由だけで静的レジストリを使用しないでください、Zendのは良い開発標準の柱であることにも、近くではありません。代わりに、状態をMVCオブジェクトに渡します。これにより、必要に応じて複数のレジストリ(または状態オブジェクト)を1回の実行で使用することができます。また、それを静的にしないと、テストするのがずっと良くなります。 – kingmaple