OpenCart 之registry功用
1. “Registry”设计模式
在OpenCart中,Registry是整个系统的信息中枢。
Registry是一个单例(Singleton),在index.php起始页面中,
首先作为构造函数参数传递给所要用到的类创建类实例,并随之将这个类实例设置到这个“注册表”中,
这个注册表就像是一个共享的数据总线一样,把各个模块/数据串联在一起。
2、整体流程
(1)创建Registry对象
(2)注册所有公共类
(3)创建Front类对象,作为请求分发器(Dispatcher)
(4)根据用户请求(url)创建控制器对象及其动作。
在Front类私有函数execute($action)中如下语句
$controller = new $class($this->registry); //创建控制器
(5)控制器加载相应的模型,如
$this->load->model('design/layout');
该语句将创建相应的model对象。
(6)控制器获取模板,绘制(提取数据并启用output buffer)到页面输出区output中
$this->render();
(7)最后Response对象把输出区的数据(页面)echo返回给用户
3、魔术函数(Magic method)
在Controller中调用$this->load->...时,熟悉面向对象语言的开发人员会觉得有点奇怪,因为Controller基类中并没有$load成员变量。
实际上这是由PHP5魔术函数来实现的。__get(), __set()函数在获取/设置非类定义成员变量的时候,会由PHP自动调用。
那么OpenCart中在执行$this->load->...时实际调用的是:
public function __get($key) {
return $this->registry->get($key);
}
现在体会到Registry‘共享总线’的作用了吧。
OpenCart 之registry功用的更多相关文章
- Opencart 之 Registry 类详解
Registry 中文意思是记录,登记,记录本的意思, 在opencart中他的用途就是 登记公共类.类的原型放在 system\engine文件夹下 代码很简单: <?php final cl ...
- 关于OpenCart的一个小建议
OpenCart是一套老牌的开源自由B2C电商系统,最近watch了其托管在在github上的项目,发现还是很活跃的,每天都有人反馈bug. 初步的看一下,它是支持在后台管理多个店铺的,而且可以同一个 ...
- OpenCart框架运行流程介绍
框架运行流程介绍 这样的一个get请求http://hostname/index.php?route=common/home 发生了什么? 1. 开始执行入口文件index.php. 2. requi ...
- 深入解析OpenCart的代理类proxy
1.什么是代理类 代理类指的是连接远程对象或不可见对象的接口,通常被客户端调用来连接真实的服务对象.更准确的定义参见维基百科 2.代理的作用 作为一个包装类,提供额外的功能 延迟加载 在本文讲到的op ...
- opencart 单入口文件简单分析
opencart 单入口文件简单分析 opencart是基于mvcl的商城系统,据说是一个外国有人单独开发.比较牛叉.但是又不大符合国人习惯,目前国内opencart社区也是不少. 简单分析了下单 ...
- opencart框架分析与概况
1. Opencart的系统架构 1.1. 架构分析 Opencart是有自己的开发架构的,其架构的核心都在system\engine 下,访问控制统一用 根目录下的 index.php 来协调. R ...
- 【java】Naming.bind和Registry.bind区别
Naming类和Registry类均在java.rmi包 Naming类通过解析URI绑定远程对象,将URI拆分成主机.端口和远程对象名称,使用的仍是Registry类. public static ...
- docker4dotnet #4 使用Azure云存储构建高速 Docker registry
使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情, ...
- StructureMap 代码分析之Widget 之Registry 分析 (1)
说句实话,本人基本上没用过Structuremap,但是这次居然开始看源码了,不得不为自己点个赞.Structuremap有很多的类,其中有一个叫做Widget的概念.那么什么是Widget呢?要明白 ...
随机推荐
- AlarmManager.setRepeating将不再准确
背景: 当我们想让Android应用程序定时为做一件工作时,我们往往会在一个BroadcastReceiver中使用AlarmManager.setRepeating()方法来实现.在API 19(即 ...
- Android日志框架darks-logs使用教程
一.配置文件 在使用darks-logs之前,我们需要为它创建一个名叫logd.properties的配置文件.如果你是需要在JAVA或WEB上使用该组件,那么你可以像配置log4j一样将它放在cla ...
- Codeforces 348A Mafia
题目链接:http://codeforces.com/problemset/problem/348/A 题目大意:N个人中找出1个人主持,剩下N-1个人参与游戏,给出每个人想参与游戏的次数,问要满足每 ...
- 天津Uber优步司机奖励政策(1月18日~1月24日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- linux驱动开发之GCC问题
最近正在学习驱动开发,进展到字符设备驱动开发阶段. 先不多说,首先把刚看的一篇学习驱动步骤的帖子记录如下: 1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. ...
- maven常用插件配置
1.maven-jar-plugin插件 <!-- 排除资源文件中的properties文件,不需要打到jar中,后面通过assembly插件打包到conf目录中 --><plugi ...
- enum类型被intent所携带时需要注意的地方
一般我们在Activity之间传递对象时多用Parcelable.比如写一个class,在这个class上标明implements Parcelable并实现接口就可以用Intent.putExtra ...
- [Angular 2] Keynote: Lazy Routing -- NGCONF
So How to do lazy loading for router in Angular 2. The nomarl way to write a router in Angular 2: Yo ...
- iOS-设置状态栏白色以及覆盖状态栏
iOS-设置状态栏白色以及覆盖状态栏 将状态栏设置为白色 首先, 在info.plist中添加一个标记. View controller–based status bar appearance键值设置 ...
- 如何设计一个简单的C++ ORM
2016/11/15 "没有好的接口,用C++读写数据库和写图形界面一样痛苦" 阅读这篇文章前,你最好知道什么是 Object Relation Mapping (ORM) 阅读这 ...