CodeIgniter отложенная загрузка библиотек / моделей / etc

#php #codeigniter #lazy-loading #autoload

#php #codeigniter #отложенная загрузка #автозагрузка

Вопрос:

При написании приложений 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();
  

Плюсы:

  1. Классы не загружаются до тех пор, пока они фактически не будут использованы
  2. Не нужно было бы автоматически загружать какие-либо классы, используя config/autoload.php
  3. Немного более чистый код (возможно)

Минусы:

  1. Дополнительный вызов метода для каждого доступа (хотя обычно просто возвращает уже загруженный экземпляр)
  2. Немного более беспорядочный код (возможно)

Ответ №1:

Используйте технику Фила Стерджена, добавьте это в свой application/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 );
 }
}