PHP MVC框架之加载器学习笔记
发布:smiling 来源: PHP粉丝网 添加日期:2014-02-27 14:18:44 浏览: 评论:0
本文章来给各位介绍PHP MVC框架之加载器学习笔记,有需要了解的朋友可进入参考.上节说了MVC的路由原理,这节我们来说说MVC框架的loader,也称为加载器.虽然不同的框架,加载器的用法不同,但是其原理都是相通的...都是通过单例模式加载文件,而且把已加载的文件cache起来,避免重复加载...因为在开发业务的过程中,常常需要加载不同的模块,不同的类库等,MVC的loader可以帮助我们实现单例模式,更加符合开发需求.下面我们开始动手,利用其原理,做一个简单的loader.
首先,我们设计的加载器,要满足可以全局使用,无论在controller里还是在model、library里都可以使用.
其次,加载器要有缓存能力,即相同的文件只加载一次,相同的类只实例化一次.
最后,要能加载多种文件,model、library、helper.
先解决第一步,怎么全局使用,最简单的办法就是定义一个全局的function,这样,在后面的不同类库,不同function里都可以调用这个全局function,进行加载文件.
第二步和第三步,要一起解决,定义一个单例模式的loader类,因为是单例模式,可以保证全局只有一份内容,这样的话,就可以利用数组把这些已加载的内容和对象cache起来,这样就可以避免了重复加载的问题...
实例代码如下:
- if ( ! function_exists(‘load’))
- {
- function load($name, $type=’model’, $data=array())
- {
- static $loader = NULL;
- if (is_null($loader))
- {
- include (ROOT.’/system/core/loader.php’);
- $loader = Loader::get_instance();
- }
- return $loader->$type($name, $data);
- }
- }
上面这个,就是我写的一个简单的全局函数 load,这个函数的作用就是为了可以全局调用,然后通过这个load函数,去调用loader类,由loader类负责加载文件,实例化,和缓存对象...下面我把loader的代码放出来给大家看看.
实例代码如下:
- <?php
- class Loader
- {
- private $_loaded_models = array();
- private $_loaded_librarys = array();
- private static $OBJ;
- # 单例模式,不允许new对象
- private function __construct()
- {
- }
- public static function get_instance()
- {
- if (is_null(self::$OBJ))
- {
- $class = __CLASS__;
- self::$OBJ = new $class;
- }
- return self::$OBJ;
- }
- public function model($model, $data=array())
- {
- $model = strtolower($model);
- # 如果已经加载,则返回对象,避免重复加载
- if (isset($this->_loaded_models[$model]))
- {
- return $this->_loaded_models[$model];
- }
- # 否则加载文件
- include ROOT.“/application/models/{$model}.php”;
- $class = ucfirst($model);
- # 实例化对象
- if (emptyempty($data))
- {
- $instance = new $class;
- }
- else
- {
- $instance = new $class($data);
- }
- # 把对象cache起来
- $this->_loaded_models[$model] = $instance;
- return $instance;
- }
- public function library($library, $data=array())
- {
- $library = strtolower($library);
- # 如果已经加载,则返回对象,避免重复加载
- if (isset($this->_loaded_librarys[$library]))
- {
- return $this->_loaded_librarys[$library];
- }
- # 否则加载文件
- include ROOT.“/application/librarys/{$library}.php”;
- $class = ucfirst($library);
- # 实例化对象
- if (emptyempty($data))
- {
- $instance = new $class;
- }
- else
- {
- $instance = new $class($data);
- }
- # 把对象cache起来
- $this->_loaded_librarys[$library] = $instance;
- return $instance;
- }
- }
- ?>
大家看到了没有,这个loader采用的是单例模式,虽然前面的function的设计已经可以保证不会重复实例化loader这个对象,但是为了真正可以保证全局只有一份loader对象,设计成单例模式是最保险的...
具体的测试例子请看代码...我把代码打包上传上来,有需要的就下载回去看看吧...下载后,解压,把lesson2文件夹放到你的www目录下,然后访问yourdomain/MVC/lesson2/index.php/index/test 试试看吧...
Tags: PHP MVC
- 上一篇:PHP MVC框架路由学习笔记
- 下一篇:PHP MVC框架 视图之常用学习笔记
相关文章
- ·PHP 是什么?(2013-11-12)
- ·Php.ini文件位置在哪里 Php.ini文件找不到(2013-11-12)
- ·PHP 数据类型(2013-11-12)
- ·php 获取当前脚本的url(2013-11-12)
- ·php技术生成静态页面的实现(2013-11-13)
- ·缺陷月项目启动 披露PHP脚本语言漏洞(2013-11-13)
- ·在PHP中全面阻止SQL注入式攻击(2013-11-13)
- ·php生成随机密码的几种方法(2013-11-13)
- ·PHP中使用FCKeditor2.3.2配置(2013-11-13)
- ·如何使用PHP开发高效的WEB系统(2013-11-13)
- ·php:树形结构的算法(2013-11-13)
- ·php4和php5区别(2013-11-13)
- ·php数据库连接(2013-11-13)
- ·如何正确理解PHP的错误信息(2013-11-13)
- ·php页面漏洞分析及相关问题解决(2013-11-13)
- ·当在连接PHP时,抱怨一些数值没有定义参考?(2013-11-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)