Opencart 之 Registry 類詳解


Registry 中文意思是記錄,登記,記錄本的意思, 在opencart中他的用途就是 登記公共類.
類的原型放在 system\engine文件夾下 代碼很簡單:

    <?php
    final class Registry {
       private $data = array();

       public function get($key) {
          return (isset($this->data[$key]) ? $this->data[$key] : NULL);
       }

       public function set($key, $value) {
          $this->data[$key] = $value;
       }

       public function has($key) {
           return isset($this->data[$key]);
         }
    }
    ?>

$data數組用來存放公共類的實例, 在opencart初始化完成后 會有19個公共類被實例化后放到Registry 類的$data數組中 ,分別為:load、config、db、url、log、request、response、cache、session、language、 document、customer、affiliate、currency、tax、weight、length、cart、encryption 這19個都是對應類的實例,也就是說你可以直接使用的!
  是不是看名字就是知道這些類是干什么的。 load是加載類,config是配置 ,db數據庫 language 網站語言, currency 貨幣類, tax稅率 cart購物車, 不過要注意有幾個類實例化時是要讀數據庫的,這些類的原型都在system\library下 大家可以去看看。

然后實例化控制器、模 型、前端控制器等類的時候 $Registry 實例會當做參數傳入。這樣新建的類實例會得到一個公共類實例的花名冊也就是$Registry ,在新實例中就可以通過Registry 調用公共類了 。 當然調用時候他用魔術方法轉換了下。拿load類來說,在控制器中調用的話應該用$this->Registry->load這樣應該不難理 解, 但是實際上調用時用$this->load很多人會很納悶,其實他用了下魔術方法 下邊這段代碼是控制器中的魔術_get代碼 ,在控制器中沒有個叫load的方法,他就會調用魔術方法_get()
實現的調用$Registry 中的實例、這樣再調用 $this->load 會被_get方法 轉換成 $tthis->registry->get(‘load’) 也就是用的$data數組中存放的那個load實例了! 以后再用公共類時已可以直接用$this->類名了 ,這樣大家該知道他是從哪里來的,該去哪找了吧!

    public function __get($key) {
          return $this->registry->get($key);
       }   
       public function __set($key, $value) {
          $this->registry->set($key, $value);
       }

文章來源:http://www.opencartchina.com/bbs/topic589.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM