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

Opencart 之 Registry 类详解的更多相关文章

  1. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  2. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  3. java之StringBuilder类详解

    StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...

  4. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  5. QAction类详解:

    先贴一段描述:Qt文档原文: Detailed Description The QAction class provides an abstract user interface action tha ...

  6. JAVAEE学习——struts2_01:简介、搭建、架构、配置、action类详解和练习:客户列表

    一.struts2是什么 1.概念 2.struts2使用优势以及历史 二.搭建struts2框架 1.导包 (解压缩)struts2-blank.war就会看到 2.书写Action类 public ...

  7. Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解

    1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...

  8. C# 内置 DateTime类详解

    C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...

  9. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

随机推荐

  1. window下的php安装redis扩展

    本实验建立在redis服务器已经安装成功的条件下.安装redis扩展需要以下步骤: 1.打开php.ini文件,并找到该段代码:extension=php_redis.dll,并去掉前面的#好,如果没 ...

  2. 在前台运行Service

    一个前台的 service是被用户强烈关注的从而不会在内存低时被系统杀死.前台 service必须在状态栏上提供一个通知,这个通知被放在"正在进行"区域中,这表示这个通知不能被解除,除非服务停止了或者 ...

  3. 【转】Java ConcurrentModificationException 异常分析与解决方案--还不错

    原文网址:http://www.2cto.com/kf/201403/286536.html 一.单线程 1. 异常情况举例 只要抛出出现异常,可以肯定的是代码一定有错误的地方.先来看看都有哪些情况会 ...

  4. 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 实现原型模式 原型模式带来的好处就是,想要构建生成任意独特对象的 ...

  5. Java中的包

    包:定义包用package关键字. 1:对类文件进行分类管理. 2:给类文件提供多层名称空间. 如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中 ...

  6. 在Ant Build文件中使用正则表达式替换文件内容

    这需要在build文件中使用<replaceregexp>标签, 这个标签的使用大概是这个样子的: <replaceregexp file="${src}/build.pr ...

  7. Cows - POJ 3348(凸包求面积)

    题目大意:利用n棵树当木桩修建牛圈,知道每头牛需要50平的生存空间,求最多能放养多少头牛. 分析:赤裸裸的求凸包然后计算凸包的面积. 代码如下: --------------------------- ...

  8. C#三种判断数据库中取出的字段值是否为空(NULL) 的方法

    操作数据库,需要判断返回的字段值是否为空,收集了3种方法供参考 1 通过System.DBNull判断,网上大部分都使用这个方法. DataTable dt;                     ...

  9. 【设计模式 - 5】之适配器模式(Adapter)

    1      模式简介 适配器模式解决的问题:让原本因为接口不兼容而不能一起工作的类可以一起工作. 适配器模式的UML原理图如下图所示: 从上图可见,客户想要用Target接口实现Adaptee接口中 ...

  10. <WEB>平板_手机开发_13 个处理触摸事件和多点触摸的JS 库

    触摸屏是现在所有智能手机的标配,还包括各种平板设备,而且很多桌面也慢慢在开始支持触摸操作.要开发支持触摸屏设备的 Web 应用,我们需要借助浏览器的触摸事件来实线. 下图是各种触摸事件说明: 本文我们 ...