用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4091|回复: 6
收起左侧

[核心代码 Core] CI 实现控制器对MODEL和类库的按需加载

[复制链接]
发表于 2013-1-4 16:27:12 | 显示全部楼层 |阅读模式
PHP复制代码
<?php if (!defined('BASEPATH')) exit('No direct access allowed.');
 
class MY_Controller extends CI_Controller {
       
        public function __construct()
        {
                $this->init_property();
       
                parent::__construct();
        }
       
       
        protected function init_property()
        {
                foreach (is_loaded() as $var => $class) {
                        $this->$var = null;
                }
 
                $this->load = null;
        }
 
        protected function _is_model($name)
        {
                if (strpos($name, '_model') !== false) {
                        return true;
                }
               
                return false;
        }
       
       
        public function __get($name)
        {
                if ($this->_is_model($name)) {
                        $this->load->model($name);
                } else {
                        $this->load->library($name);
                }
 
                return $this->$name;
        }      
}
?>
 
/*
$rs = $this->form_validation->run();
$this->post_model->test();
然后其他的控制器继承  MY_Controller 类, 在控制器中类库和MODEL直接用就可以了,不需要再手动加载了。
*/
 
复制代码

评分

参与人数 1威望 +5 收起 理由
Hex + 5 很给力!

查看全部评分

发表于 2013-1-4 16:49:00 | 显示全部楼层
不错,只是性能上有没有影响?
 楼主| 发表于 2013-1-4 17:01:57 | 显示全部楼层
diy66 发表于 2013-1-4 16:49
不错,只是性能上有没有影响?

性能的问题,可以用CI的benchmark 测一下,这个我还没试
发表于 2013-1-4 17:16:32 | 显示全部楼层
diy66 发表于 2013-1-4 16:49
不错,只是性能上有没有影响?

使用的PHP5的魔术方法,性能应该忽略不计,甚至更好,可以测试下,呵呵
发表于 2013-1-6 09:13:26 | 显示全部楼层
一般情况下挺好,性能的影响忽略不计,只是不支持类库和模型有目录的情况
 楼主| 发表于 2013-1-6 11:24:17 | 显示全部楼层
haohailuo 发表于 2013-1-6 09:13
一般情况下挺好,性能的影响忽略不计,只是不支持类库和模型有目录的情况 ...

多谢关注, 只要是目录是有规律的,把__get 函数装载model和类库的方式对应修改一下即可,我写的这个只能算是个小思路吧,实际用的时候肯定要做各种对应修改的
发表于 2013-1-10 11:39:20 | 显示全部楼层
这个思路很不错,学习了

本版积分规则