ホームページ  >  記事  >  バックエンド開発  >  Zend のレジストリ メカニズムの使用手順_PHP チュートリアル

Zend のレジストリ メカニズムの使用手順_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:10:20762ブラウズ

プロジェクトプロセスにはグローバルに保存する必要があるグローバル変数がたくさんあります。グローバル変数は保存に使用されますか?それは弱すぎるでしょう。 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

tru​​e

http://www.bkjia.com/PHPjc/327073.html

技術記事

プロジェクト プロセスにはグローバルに保存する必要があるグローバル変数が多数あります。グローバル変数は保存に使用されますか?それは弱すぎるでしょう。 Zend はレジストリ メカニズム (レジストリ) を使用してオブジェクトと値を保存します...



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。