PHP MVC框架之加载器学习笔记
首先,我们设计的加载器,要满足可以全局使用,无论在controller里还是在model、library里都可以使用.
其次,加载器要有缓存能力,即相同的文件只加载一次,相同的类只实例化一次.
最后,要能加载多种文件,model、library、helper.
先解决第一步,怎么全局使用,最简单的办法就是定义一个全局的function,这样,在后面的不同类库,不同function里都可以调用这个全局function,进行加载文件.
第二步和第三步,要一起解决,定义一个单例模式的loader类,因为是单例模式,可以保证全局只有一份内容,这样的话,就可以利用数组把这些已加载的内容和对象cache起来,这样就可以避免了重复加载的问题...
实例代码如下:
$type($name, $data); } } ?>
上面这个,就是我写的一个简单的全局函数 load,这个函数的作用就是为了可以全局调用,然后通过这个load函数,去调用loader类,由loader类负责加载文件,实例化,和缓存对象...下面我把loader的代码放出来给大家看看.
实例代码如下:
_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 试试看吧...
教程网址:
欢迎收藏∩_∩但请保留本文链接。
上一篇: Python 之SQLite3
推荐阅读
-
荐 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---10. MVC 结果渲染器的编写
-
Spring web MVC 框架学习笔记 之 ViewResolver技术
-
荐 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!
-
Laravel 5框架学习之模型、控制器、视图基础流程_php实例
-
PHP MVC框架之加载器学习笔记
-
PHP MVC框架 视图之常用学习笔记
-
Laravel 5框架学习之模型、控制器、视图基础流程,laravel框架_PHP教程
-
Symfony2框架学习笔记之HTTP Cache用法详解_PHP
-
Laravel框架学习笔记(二)项目实战之模型(Models)_PHP
-
PHP MVC框架路由学习笔记_PHP