Все контроллеры расширяют основной CI_Controller, поэтому вызов чего-то вроде $this->load
означает доступ к родительскому методу load()
внутри родительского класса CI_Controller.
$this->ci
работает, потому что с $this->ci = &get_instance()
вы звонитессылка на основной класс контроллера ... еще раз.Если вы посмотрите в файл начальной загрузки (IIRC. Или файл codeigniter.php), то найдется функция get_instance()
, которая только возвращает (по ссылке) экземпляр класса CI_Controller.
Итак, в основном,вызовы $this->ci->load
и $this->load
- это одно и то же, только первое не нужно в Controller / Model / View, потому что система уже делает это в родительском классе (через загрузку метода).
Если вы посмотрите на библиотеки, например, вместо этого вы увидите, что использование $this->ci->method()
необходимо, потому что вам необходимо иметь все методы CI_Controller, который является своего рода «суперклассом», который управляетвся структура.
Взгляните на класс загрузчика и класс CodeIgniter, чтобы понять, как внутренне работает CI.