Zend的Registry機制的使用說明_PHP教程

      編輯Tag賺U幣
      教程Tag:ZENDRegistry添加

      推薦:基于Zend的Config機制的應用分析
      本篇文章介紹了,基于Zend的Config機制的應用分析。需要的朋友參考下

      項目過程中有很多全局變量, 需要全局存儲,是否是使用全局變量來進行存儲?那就弱爆了。Zend使用Registry機制(注冊表)存儲對象和值,是一個存儲對象和值的容器。

      Zend_Registry這個類就是做這個目的

      代碼示例
      Zend_Registry::set('config', $config);
      Zend_Registry::get('config');

      代碼分析
      這兩個函數是最常用的兩個函數。我們來看一下這個類

      class Zend_Registry extends ArrayObject

      這個類繼承自ArrayObject

      ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable

      ArrayObject是一個對象集合,相當于其他語言的泛型集合的概念。

      重點了解下void ArrayObject::offsetSet ( mixed $index , mixed $newval ), 這個函數就是hashtable中的設置key,value,只是key,value可以是任何類型的。

      好了,回到Zend_Registry, 看看set做了些什么事情

      set函數

      復制代碼 代碼如下:www.wf0088.com

      public static function set($index, $value)
      {
      $instance = self::getInstance();
      $instance->offsetSet($index, $value);

      }


      一個是實例化Register,另一個是調用offsetSet方法,將index和value設置進去。

      offset方法很好理解,但是為什么要使用getInstance方法呢?

      這里建議大家好好看看,這個是結合類靜態方法的單例模式。

      我們一般的單例模式寫成:

      復制代碼 代碼如下:www.wf0088.com

      class A{
      private $_instance;
      public static function getInstance(){
      ...
      }

      protected function __construct(){
      ...
      }

      public function setVal(){
      ...
      }
      }

      $a = A::getInstance();

      $a->setVal();

      這樣在調用之前就需要實例化一個類,雖然這個實例化實際上是單例,但感覺還是不舒服

      這邊的register就做到了直接使用靜態方法調用

      A::setVal();

      大致的代碼思路我寫了個demo

      復制代碼 代碼如下:www.wf0088.com

      class A{
      private static $_instance;
      public static function getInstance(){
      if(self::_instance !==null){
      return $this->_instance;
      } else {
      return new A();
      }
      }

      public function __construct(){

      }

      public static function setV(){
      $a = self::getInstance();
      $a->setVal();
      }

      public function setVal(){
      ...
      }
      }

      A::setV();

      實際上就是直接把__construct()放開成為public,然后實例化它

      分享:關于尾遞歸的使用詳解
      本篇文章介紹了,關于尾遞歸的使用詳解。需要的朋友參考下

      來源:模板無憂//所屬分類:PHP教程/更新時間:2013-05-03
      相關PHP教程