zoukankan      html  css  js  c++  java
  • Opencart 之 Registry 类详解

    Registry 中文意思是记录,登记,记录本的意思, 在opencart中他的用途就是 登记公共类.
    类的原型放在 systemengine文件夹下 代码很简单:

        <?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购物车, 不过要注意有几个类实例化时是要读数据库的,这些类的原型都在systemlibrary下 大家可以去看看。

    然后实例化控制器、模 型、前端控制器等类的时候 $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

  • 相关阅读:
    MySQL数据库的安装与配置
    java中的反射机制
    详谈设计模式之单列模式
    servlet内部转发与重定向
    servlet基础语句总结
    Servlet映射的俩种方法以及优缺点
    eclipse和idea的快捷键比较及idea如何调节eclipse的快捷键
    servlet
    JDK下载与安装教程
    正则表达式查询
  • 原文地址:https://www.cnblogs.com/mssql8/p/3832702.html
Copyright © 2011-2022 走看看