Где находится $ db в CI_Model? - PullRequest
2 голосов
/ 05 июня 2011

Я пришел из Java, и сейчас пытаюсь изучить PHP для веб-проекта, который я делаю на стороне, написанной в CodeIgniter. Прямо сейчас я пытаюсь изучить, как использовать модели CI. Мне, естественно, очень любопытно читать код инфраструктуры, чтобы глубже понять, как работают инструменты, которые я использую.

Я действительно сбит с толку относительно того, откуда взято "$ db" в "$ this-> db" в классах Model, которые расширяют CI_Model. Я проверил сам класс CI_Model, но его там нет.

До этого я прочитал код CI_Controller и почему-то считаю, что хотя $ this-> load-> model (....) не является переменной экземпляра ($ this-> load) с моделью метода ( ..._), каким-то образом "оно есть", потому что конструктор создает экземпляр переменной $ this-> load в конструкторе (класс Loader, найденный в папке core /, которая имеет функцию model (...).

Но для $ CI_Model я не вижу того же. Где ссылка "$ this-> db" и когда она загружается?

Ответы [ 2 ]

3 голосов
/ 05 июня 2011

Я не изучал код достаточно усердно, но какое-то время пользуюсь codeigniter, надеюсь, что-то не так, но, как вы уже догадались, что-то не работает. Требуемый $ db находится не в суперклассе CI_Model (и не в суперклассе CI_Controller), а в переменной, объявленной в классе Loader (system / core / loader.php).

Приложение codeigniter разработано так, как если бы оно было гигантским «суперклассом», на самом деле все библиотеки, модели и т. Д. Создаются с использованием $ this (которое обычно используется в области видимости класса), поэтому, когда вы загружаете библиотеку db - и вы можете делать это в своих моделях, а также в своих контроллерах (и, если вы создаете экземпляр основного класса $ CI в пользовательской библиотеке, также там), вы фактически ссылаетесь на переменную create в классе загрузчика, точно в строке 229 (более или менее) внутри метода базы данных класса CI_Loader.

Я не настолько глубоко разбираюсь в знаниях CI, чтобы дать вам более подробную информацию, но если вы посмотрите на codeigniter.php и loader.php, вы сможете получить достаточно глубокое понимание, чтобы понять, как CI работает внутри.

Если у вас есть другой вопрос или что-то еще не ясно, просто спросите;)

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

$ this-> db может быть загружен локально в модель / контроллер: $ this-> load-> library ('database'), но, скорее всего, библиотека базы данных загружена автоматически - проверьте: application / config / autoload.php.Для кода вы должны проверить класс CI_Loader, как говорит Дэмиен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...