Php CodeIgniter延迟加载库/模型/etc

Php CodeIgniter延迟加载库/模型/etc,php,codeigniter,lazy-loading,autoload,Php,Codeigniter,Lazy Loading,Autoload,在编写CodeIgniter应用程序时,我的控制器操作往往从以下几行开始: $this->load->model('abc_model'); $this->load->library('ijk'); 然后(为了完整起见),它们的用法如下: $this->abc_model->fetch_123(); $this->ijk->do_something(); 扩展MY_Controller以实现以下功能是否会有任何错

在编写CodeIgniter应用程序时,我的控制器操作往往从以下几行开始:

    $this->load->model('abc_model');
    $this->load->library('ijk');
然后(为了完整起见),它们的用法如下:

    $this->abc_model->fetch_123();
    $this->ijk->do_something();
扩展
MY_Controller
以实现以下功能是否会有任何错误

    $this->model('zbc_model')->fetch_stuff();
    $this->library('ijk')->do_something();
优点:

  • 类在实际使用之前不会被加载
  • 不需要使用
    config/autoload.php自动加载任何类
  • 稍微干净的代码(可以论证)
  • 缺点:

  • 每次访问都有一个额外的方法调用(通常只是返回已经加载的实例)
  • 稍微混乱的代码(可以论证)
  • 使用Phil Sturgeon,将其添加到应用程序/config/config.php中

    /*
    | -------------------------------------------------------------------
    |  Native Auto-load
    | -------------------------------------------------------------------
    | 
    | Nothing to do with cnfig/autoload.php, this allows PHP autoload to work
    | for base controllers and some third-party libraries.
    |
    */
    function __autoload($class)
    {
     if(strpos($class, 'CI_') !== 0)
     {
      @include_once( APPPATH . 'core/'. $class . EXT );
     }
    }