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
Opencart 之 Registry 类详解的更多相关文章
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...
- java之StringBuilder类详解
StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
- QAction类详解:
先贴一段描述:Qt文档原文: Detailed Description The QAction class provides an abstract user interface action tha ...
- JAVAEE学习——struts2_01:简介、搭建、架构、配置、action类详解和练习:客户列表
一.struts2是什么 1.概念 2.struts2使用优势以及历史 二.搭建struts2框架 1.导包 (解压缩)struts2-blank.war就会看到 2.书写Action类 public ...
- Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解
1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...
- C# 内置 DateTime类详解
C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
随机推荐
- 【UVA10603】Fill (构图+最短路)
题目: Sample Input22 3 4 296 97 199 62Sample Output2 29859 62 题意: 有三个杯子它们的容量分别是a,b,c, 并且初始状态下第一个和第二个是空 ...
- Delphi基本图像处理代码
//浮雕procedure Emboss(SrcBmp,DestBmp:TBitmap;AzimuthChange:integer);overload;var i, j, Gray, Azimuth ...
- 【HDOJ】2888 Check Corners
二维RMQ. /* 2888 */ #include <iostream> #include <algorithm> #include <cstdio> #incl ...
- (转载)javascript客户端生成MD5值的函数代码
(转载)http://www.jb51.net/article/26223.htm 用js实现的客户端即可实现md5值的代码,一般情况下都是后台语言才有的,客户端也有了,方便有需要的朋友了. 测试代码 ...
- 在unity3d中连接sql server
虽然在Unity3D中能够通过PlayerPrefs类来保存和读取数据,但是一旦数据量增大,仅仅通过代码的方式存取数据,这样的工作量是非常大的.那么如何通过使用Sql Server数据库来存取数据呢? ...
- UIColor的使用
UIColor主要在设置各个控件的颜色的时候用得到,主要有以下几种方法创建UIColor: 1.使用RGBA创建: greenbluealpha]; 2.直接创建各个常用颜色: [UIColo ...
- jquery 使用方式记录
1.监听键盘事件 $("#id").keyup(function(event){ if(event.keyCode == 13){ $("#btn_addgoods_su ...
- 宁波Uber优步司机奖励政策(1月25日~1月31日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- (C#)与Windows用户账户信息的获取
Console.WriteLine(Environment.UserName); //计算机NetBIOS名称 Console.WriteLine(Environment.MachineName); ...
- linux下切割catalina.out文件,按天生成文件
1.下载工具cronolog压缩包(http://download.csdn.net/detail/sunling_sz/8144469) 2.将文件拖放到server,不论什么文件夹都能够. 3.进 ...