プロジェクトプロセスにはグローバルに保存する必要があるグローバル変数がたくさんあります。グローバル変数は保存に使用されますか?それは弱すぎるでしょう。 Zend はレジストリ メカニズム (レジストリ) を使用してオブジェクトと値を保存し、オブジェクトと値を保存するためのコンテナーです。
この目的には Zend_Registry クラスが使用されます
コード例
Zend_Registry::set('config', $config);
Zend_Registry::get('config');
コード分析
これら 2 つの関数は、最もよく使用される 2 つの関数です。このクラスを見てみましょう
クラス Zend_Registry は ArrayObject を拡張します
このクラスは ArrayObject を継承します
ArrayObject は IteratorAggregate、Traversable、ArrayAccess、Serializable、Countable を実装します
ArrayObject はオブジェクトのコレクションであり、他の言語の汎用コレクションの概念に相当します。
void ArrayObject::offsetSet (mixed $index、mixed $newval) の理解に重点を置きます。この関数は、ハッシュテーブルにキーと値を設定します。キーと値は任意の型にすることができます。
それでは、Zend_Registry に戻ってセットが何をしたか確認してください
set関数
コードをコピーします コードは次のとおりです:
public static function set($index, $value)
{
$instance = self::getInstance();
$instance ->off setSet ($index, $value)
}
1 つは Register をインスタンス化することであり、もう 1 つは offsetSet メソッドを呼び出してインデックスと値を設定することです。
offset メソッドはわかりやすいですが、なぜ getInstance メソッドを使用するのでしょうか?
これはクラスの静的メソッドと組み合わせたシングルトン パターンです。
一般的なシングルトン パターンは次のように記述されます:
コードをコピーします コードは次のとおりです:
class A{
private $_instance
public static function getInstance(){
...
protected Function __Construct () {
...
}
public function setval () {
...
}}
$ a :: getInstance ()
$ a- & gt; );
このように、呼び出す前にクラスをインスタンス化する必要がありますが、それでも違和感があります
。
ここのレジスタは静的メソッドを使用して直接呼び出すことができます
A::setVal();
一般的なコードのアイデアのデモを書きました
コードをコピーします コードは次のとおりです:
class A{
private static $_instance;
public static function getInstance(){
if(self: :_instance!= = null){
= null){
} {
$ a = seth :: getInstance(); public function setval () {
...
}}} :: setv (); 上記は、__construct() を直接 public にしてインスタンス化する方法です
http://www.bkjia.com/PHPjc/327073.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/327073.html
技術記事
プロジェクト プロセスにはグローバルに保存する必要があるグローバル変数が多数あります。グローバル変数は保存に使用されますか?それは弱すぎるでしょう。 Zend はレジストリ メカニズム (レジストリ) を使用してオブジェクトと値を保存します...