В итоге в LAutoloader->Connect передаётся не LibUrl, а LIBRARIES\LibUrl
И с учётом этого если сам файл-класс находится не по адресу ...\LIBRARIES\LibUrl....
то мне в любом случае придутся парсить имя переданного класса, так? Если так, то тогда чем мой код хуже?
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
juramaj пишет:
Как избавится в маршрутизаторе на mvc от include, а вместо этого реализовать функцию autoload для загрузки классов. Вот мой маршрутизатор:
Autoload работает когда создаеться екземпляр класа который не подключен. Далее сами
juramaj
Отправлено: 30 Января, 2015 - 14:31:53
Гость
Покинул форум
Сообщений всего: 98
Дата рег-ции: Дек. 2014
Помог: 0 раз(а)
esterio пишет:
juramaj пишет:
Как избавится в маршрутизаторе на mvc от include, а вместо этого реализовать функцию autoload для загрузки классов. Вот мой маршрутизатор:
Autoload работает когда создаеться екземпляр класа который не подключен. Далее сами
Мозг взрывается, не могу понять. У меня же в маршрутизаторе берутся переменные с адресной строки, не могу понять как мне их подгрузить(файлы в которых есть эти классы) не используя include. Может хоть намекнёте?
GoDr
Отправлено: 30 Января, 2015 - 14:57:15
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
суть автозагрузки в следующем
Допустим есть класс MyClass и в нём есть метод getValue.
И есть класс NoMyClass и в нём есть метод setValue.
Классы находятся в файлах myclass.php и nomyclass.php
Вопрос: как вызвать MyClass::getValue() и NoMyClass::setValue($str)?
Теперь что происходит при вызове:
- мы вызываем MyClass::getValue()
- но такого класса нет ещё и поэтому название класса (MyClass) автоматически передаётся
- метод получает переменную, а вот что дальше с ней делать уже решаешь сам
В данном примере мы получаем имя класса. И мы знаем что имя совпадает с названием файла. И мы знаем какой путь до файла. А значит мы просто подставляем недостающий адрес и подключаем файл
прописиваем в адресной строке http://localhost/test.php
в том виде который сейчас у нас получиться ошибка про то что класс MyClass не обьявлен
для этого дополним наш test.php чтобы он имел следующий вид
как видно из примера все работает отлично. теперь попорядку.
При создании обьекта ПХП смотрт обьявлен ли такой класс или нет. Если не обьявлен то визовет функцию autoload. Визовет именно ее потому, что именно ее название мы пеердали в качестве аргумента в функцию spl_autoload_register.
В свою очередь первым аргументом при визове autoload будет имя класса который мы хотим создать (но который до сих пор не обьявлен). В даном случае переменная $classname будет равна MyClass. А далее мы подключаем ПХП файл который имеет такое же название как и класс
Теперь в папке проекта будет находиться папка vendor, которая включает в себя собственно сам автозагрузчик autoload.php. Также создаём папку src в которой и будет весь код проекта в соответствии с PSR-0 без сторонних библиотек, которые будут лежать в vendor.
И самое интересное - это кеш автозагрузчика! ;) т.е. чтобы не было попыток находить файл, его имя и полный путь кешируется в APC, WinCache, XCache и т.д.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
digi пишет:
Если код пишется в соотвествии с PSR, то удобнее всего использовать автозагрузчик композера:
Вот вам ответ на все вопросы по автолоаду. Современно, красиво и идеологически правильно.
----- Чем больше узнаю, тем больше я не знаю.
juramaj
Отправлено: 30 Января, 2015 - 17:03:13
Гость
Покинул форум
Сообщений всего: 98
Дата рег-ции: Дек. 2014
Помог: 0 раз(а)
[quote=esterio]GoDr
Извините но вы ошибаетесь
1. зачем проверять
[quote=GoDr] if (!class_exists($class_name)) {
require_once(_PATH_ROOT . '/class/' . $class_name . '.php');
}[/quote]
если автолоадер не будет вызван если клас обьявлен
2. пример с довома класамми и со статикой не самый удачный
juramaj
Чтобы не запутивать вас обьясню коротко.[quote]
Теорию то я понял, а вот как оно на практике реализуется именно с моим случаем маршрутизатор? Как избавится от тех include, а чтобы всё автоматически подгружалось не могу понять.
esterio
Отправлено: 30 Января, 2015 - 17:15:28
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
смотрте если есть include то мы явно обьявляем класс, значит автозагрузчик не сработает, а если убрать что будет тогда думаю можно догадатся
juramaj
Отправлено: 30 Января, 2015 - 17:22:32
Гость
Покинул форум
Сообщений всего: 98
Дата рег-ции: Дек. 2014
Помог: 0 раз(а)
esterio пишет:
смотрте если есть include то мы явно обьявляем класс, значит автозагрузчик не сработает, а если убрать что будет тогда думаю можно догадатся
Вы не можете помочь мне переписать маршрутизатор. Я новичок в mvc и мне бы хоть разок увидеть как это всё реализуется и всё. Вот код:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.