lunux2008 发表于 2013-1-4 16:27:12

CI 实现控制器对MODEL和类库的按需加载

<?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直接用就可以了,不需要再手动加载了。
*/

diy66 发表于 2013-1-4 16:49:00

不错,只是性能上有没有影响?

lunux2008 发表于 2013-1-4 17:01:57

diy66 发表于 2013-1-4 16:49 static/image/common/back.gif
不错,只是性能上有没有影响?

性能的问题,可以用CI的benchmark 测一下,这个我还没试 :lol

Hex 发表于 2013-1-4 17:16:32

diy66 发表于 2013-1-4 16:49 static/image/common/back.gif
不错,只是性能上有没有影响?

使用的PHP5的魔术方法,性能应该忽略不计,甚至更好,可以测试下,呵呵

haohailuo 发表于 2013-1-6 09:13:26

一般情况下挺好,性能的影响忽略不计,只是不支持类库和模型有目录的情况

lunux2008 发表于 2013-1-6 11:24:17

haohailuo 发表于 2013-1-6 09:13 static/image/common/back.gif
一般情况下挺好,性能的影响忽略不计,只是不支持类库和模型有目录的情况 ...

多谢关注, 只要是目录是有规律的,把__get 函数装载model和类库的方式对应修改一下即可,我写的这个只能算是个小思路吧,实际用的时候肯定要做各种对应修改的

nicolaslei 发表于 2013-1-10 11:39:20

这个思路很不错,学习了
页: [1]
查看完整版本: CI 实现控制器对MODEL和类库的按需加载