#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();
Плюсы:
- Классы не загружаются до тех пор, пока они фактически не будут использованы
- Не нужно было бы автоматически загружать какие-либо классы, используя
config/autoload.php
- Немного более чистый код (возможно)
Минусы:
- Дополнительный вызов метода для каждого доступа (хотя обычно просто возвращает уже загруженный экземпляр)
- Немного более беспорядочный код (возможно)
Ответ №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 );
}
}