Хм, ну, давайте начнем с этого: суперкласс CI_Controller;это тот, который расширяет все контроллеры и действует как суперобъект CI для всех $, к которым это относится.
CI_Controller действует как синглтон, и во время инициализации он вызывает функцию load_class()
(вы можете найти вcommon.php), который работает как автозагрузчик : внутри статического массива ($ _classes) он присваивает в качестве индекса имя класса и в качестве значения экземпляр класса:
$_classes[$class] = new $name();
Затемсопутствующая is_loaded()
функция (в том же файле) регистрирует в массиве всю загруженную функцию и используется для проверки позже, если класс уже был создан или нет.
Ci_Controller назначает его свойству $ loadэкземпляр класса Loader (core / loader.php, с использованием вышеуказанного механизма)
$this->load =& load_class('Loader', 'core');
, который, в свою очередь, отвечает за загрузку всех других ресурсов, используя свои собственные методы: helper (), library(), модель () и так далее.Посмотрите на источник для всех деталей, надеюсь, что вы получили картинку, хотя
Чтобы уточнить согласно вашему комментарию:
$load = new Loader();
$load->helper('helper');
будет таким же, как:
$this->load->helper('helper')
,
, поскольку $this->load
содержит экземпляр (по ссылке) класса Loader.Тогда как методы helper (), library () и т. Д. Класса Loader было бы слишком много, чтобы писать здесь, кроме того, вы можете открыть файл Loader.php и посмотреть сами.