![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Kotakota |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 14.12.2010 Репутация: нет Всего: нет |
Привет.
Заинтересовал такой вопрос. Возьмем за пример, класс контроллера из фреймворка Yii. class SiteController extends CController public actionDoNothing() { $model = new Post; } } Как удалось создать экземпляр класса модели, когда мы не подключали *.php файл с кодом этого класса? И вообще интересует вот что. У меня, например, есть фронт-контроллер, в котором создается много экземпляров других классов. Соответственно я подключаю *.php файл каждого класса с помощью require_once(...) В конечном итоге у меня этих require_once() создается достаточно приличное количество. Может можно сделать как то по другому? Чтобы каждый раз не писать require_once(...) для подключения других классов. На ум приходит только __autoload() но я не в восторге от magic-method. |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Kotakota, есть __autoload
Но есть и spl http://www.phpro.org/tutorials/SPL-Autoload.html В моем фреймворке к примеру основной метод который отвечает за авто-подключение это статический метод главного класса (-> сердца фреймворка) Это сообщение отредактировал(а) Muerto - 14.4.2011, 14:05 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
В Yii в конфигурации написано откуда грузить классы.
Секция preload - автоматически загружаемые классы, секция import - путь для поиска класса для ленивой загрузки. Никакой мистики -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Kotakota |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 14.12.2010 Репутация: нет Всего: нет |
Предлагаю свой вариант!
Файл SomeController.php
Файл FrontController.php
Это вариант правда мне что-то не очень нравится Muerto, можно посмотреть Вашу функцию? ksnk, спасибо, буду смотреть. Посмотрел, как сделано в Yii http://www.yiiframework.com/doc/api/1.1/Yi...omponent-detail Только интересно в какой момент она вызывается?
Как из этого можно понять, что нужно вызывать createComponent()? Это сообщение отредактировал(а) Kotakota - 14.4.2011, 20:09 |
||||||
|
|||||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
В Yii реализовано через SPL autoload. см. YiiBase::registerAutoloader и YiiBase::autoload.
-------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| Kotakota |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 14.12.2010 Репутация: нет Всего: нет |
Воспользовался SPL Autoload.
Пытаюсь вызвать Expection:
получаю: Fatal error: Class 'Expection' not found in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\application\controllers\Controller.php on line 85 Как можно сделать так, чтобы системные классы грузились нормально, без Autoloader'а? Или придется создавать свои классы наследуемые от системных классов PHP? И еще такой вопрос. Как сделать мультизагрузку классов из разных папок в одном методе? Сейчас решаю эту проблему следующим образом:
Это сообщение отредактировал(а) Kotakota - 15.4.2011, 08:55 |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |