| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Вопрос по подключению классов в Yii и вообще! |
| Автор: Kotakota 14.4.2011, 13:42 |
| Привет. Заинтересовал такой вопрос. Возьмем за пример, класс контроллера из фреймворка Yii. class SiteController extends CController public actionDoNothing() { $model = new Post; } } Как удалось создать экземпляр класса модели, когда мы не подключали *.php файл с кодом этого класса? И вообще интересует вот что. У меня, например, есть фронт-контроллер, в котором создается много экземпляров других классов. Соответственно я подключаю *.php файл каждого класса с помощью require_once(...) В конечном итоге у меня этих require_once() создается достаточно приличное количество. Может можно сделать как то по другому? Чтобы каждый раз не писать require_once(...) для подключения других классов. На ум приходит только __autoload() но я не в восторге от magic-method. |
| Автор: Muerto 14.4.2011, 14:04 |
| Kotakota, есть __autoload Но есть и spl http://www.phpro.org/tutorials/SPL-Autoload.html В моем фреймворке к примеру основной метод который отвечает за авто-подключение это статический метод главного класса (-> сердца фреймворка) |
| Автор: ksnk 14.4.2011, 15:08 |
| В Yii в конфигурации написано откуда грузить классы. Секция preload - автоматически загружаемые классы, секция import - путь для поиска класса для ленивой загрузки. Никакой мистики |
| Автор: Kotakota 14.4.2011, 19:50 | ||||||
| Предлагаю свой вариант! Файл SomeController.php
Файл FrontController.php
Это вариант правда мне что-то не очень нравится Muerto, можно посмотреть Вашу функцию? ksnk, спасибо, буду смотреть. Посмотрел, как сделано в Yii http://www.yiiframework.com/doc/api/1.1/YiiBase#createComponent-detail Только интересно в какой момент она вызывается?
Как из этого можно понять, что нужно вызывать createComponent()? |
| Автор: SamDark 15.4.2011, 03:09 |
| В Yii реализовано через SPL autoload. см. YiiBase::registerAutoloader и YiiBase::autoload. |
| Автор: Kotakota 15.4.2011, 08:47 | ||||
| Воспользовался 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? И еще такой вопрос. Как сделать мультизагрузку классов из разных папок в одном методе? Сейчас решаю эту проблему следующим образом:
|