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. android工程混淆和反编译

    一.工程文件的混淆 混淆文件下载:http://download.csdn.net/detail/lxq_xsyu/6328751 1.在根目录下添加progard.cfg文件 2.打开project ...

  2. Linq打印

    Method syntax: Enumerable.Range(1, 100).ToList().ForEach(Console.WriteLine); Query syntax: (from n i ...

  3. 【索引】UML学习笔记

    行为图 交互图 交互概览图 时间图 顺序图 通信图 活动图 状态及图 用例图 结构图 包图 类图 对象图 组件图 部署图 组合结构图

  4. Ado Recordset.open

    Recordset.open Recordset 对象的 Open 方法 允许用户向数据库发出请求,通过是运行一个 SQL命令.启动一个指定的数据表或调用一个指定的 Stored Procedure ...

  5. About using UTF-8 fields in MySQL

    https://www.adayinthelifeof.nl/2010/12/04/about-using-utf-8-fields-in-mysql/ I sometimes hear: “make ...

  6. Uncode-Schedule首页、文档和下载 - 分布式任务调度组件 - 开源中国社区

    Uncode-Schedule首页.文档和下载 - 分布式任务调度组件 - 开源中国社区 分布式任务调度组件 Uncode-Schedule

  7. record

    http://www.cnblogs.com/90zeng/p/python_translation.html http://www.cnblogs.com/netfocus/p/4478094.ht ...

  8. weekend110(Hadoop)的 第七天笔记

    (2015年1月31日) 课程目录 01-storm基本概念 02-storm编程规范及demo编写 03-storm的topology提交执行 04-kafka介绍 05-kafka集群部署及客户端 ...

  9. 364. Nested List Weight Sum II

    这个题做了一个多小时,好傻逼. 显而易见计算的话必须知道当前层是第几层,因为要乘权重,想要知道是第几层又必须知道最高是几层.. 用了好久是因为想ONE PASS,尝试过遍历的时候构建STACK,通过和 ...

  10. flash引入

    博客页面引入一个小人的动画时钟代码 <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase ...