CodeIgniter лениво-загружающие библиотеки / модели / и т. Д. - PullRequest
2 голосов
/ 16 мая 2011

При написании приложений 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. Классы не загружаются до тех пор, пока они на самом деле не будут загруженыused
  2. Не нужно автоматически загружать какие-либо классы, используя config/autoload.php
  3. Чуть более чистый код (возможно)

Минусы:

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

1 Ответ

2 голосов
/ 12 июня 2011

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