![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Arantir |
|
||||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Не надо слишком конкретизировать. То была только абстрактная идея, а Вы уже в ней баги ищите =) use отлично разрешает большинство ситуаций.
Теперь внутри этого класса модели именно этого модуля доступны в простом виде Model\ClassName. То есть он знает "свои" модели. И откуда этот класс не вызывай, все будет работать. PHP разрулит нейспейсы как надо. Это сообщение отредактировал(а) Arantir - 29.8.2013, 13:18 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
что значит баги? мне нужно конктретное решение, а не абстракция. Как я прикручу абстракцию к своему проекту? И опять же, при чёткой структуре может это и интересно.. Но ведь есть не только "модельная" структура и классы можут располагаться совершенно по иной логике и вызываться по иному.. -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Arantir |
|
||||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
С неймспейсами все просто. Создается список папок, откуда начинаются корневые неймспейсы
Все. Дальше PHP все сам сделает, он всегда сует в автолодер "fully qualified name" класса. Остается только создавать файлики с именами классов, прописывать им желаемый неймспейс и класть в соответствующую директорию. Все будет грузиться само, как в Java. После этого структура ограничивается лишь фантазией. В идеале можно даже создать единственный корневой неймспейс Application, соотнести ему корень проекта и не парится. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Есть некая PHP Framework Interoperability Group, которая пытается навести порядок в самодеятельном php программировании, путем навязывания сообществу стандартов программирования.
В частности PSR-0 достаточно удачная попытка навязать стандарт на неймспейсы и организацию автолода. Во всяком случае, чем мастерить собственный стандарт, лучше присмотреться к чужому, у которого неплохие шансы стать "общепринятым". -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
вот смотрю и что-то это совсем на бред стало похоже..
Если namespace это тоже самое (ну или почти) что и путь, то не проще ли получить путь файла разложить его как угодно был /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php стал \Doctrine\Common\IsolatedClassLoader Вот в принципе о чём говорит эта группа и вообще мне кажется весь разговор -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Дело в том, что сначала PHP узнает про класс, а потом ищет его в файле/файлах, а не наоборот - парсит 1оо5оо файлов и создает из них классы. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ну например что-то такое придумать
так как вызов будет осуществлён из последнего подключенного файла то мы всегда будем иметь адрес этого файла -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Мне представляется, что в последовательности
последним включенным файлом будет b.php, а не a.php А так - забавная функция, ее можно пристроить к автоматическому построителю карты отображения классов в скрипты системы. Другого применения придумать пока не удалось. P.S. Не, нельзя пристроить даже и к этому... Не знаю, зачем она нужна Это сообщение отредактировал(а) ksnk - 30.8.2013, 08:52 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
трассировка
В общем получается что узнать путь из которого вызван класс можно только через NAMESPACE? но мне кажется есть какая-то функция в PHP -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Применение только одно это получить те пути которые есть в include_path отсортировать удалить повторения и включить в них новый путь.
Что то такое
Но этот способ подходит для классов в виде MYCLASS.PHP без namesapce Для NP которые не повторят файловый путь, лучше всего это массивная карта чем перебор директорий. Это сообщение отредактировал(а) Sanchezzz - 30.8.2013, 10:07 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
C чего возникло желание узнать путь по имени класса? Обычно эта задача уже решена, своеобразно, в слое autoload-функций, почему бы не скопировать оттуда? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ну если считать что "рекомендации" советуют обзывать namespace как и путь, точему бы просто не разложить путь
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Вот так, примерно, у меня сделано
Просто повторить перебор "базовых" каталогов, если он есть. Это сообщение отредактировал(а) ksnk - 30.8.2013, 11:03 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Есть такая структура приложений по умолчанию.
app/frontend --сайт modules <name> controllers models // cуб модули > N modules <name> models controllers app/backend --админка по структуре также как и в frontend app/common --общая часть Как лучше из след. 2х вариантов поступить для NP 1 Писать полностью NP от корня например для модуля crud придется задать такой NP app/frontend/modules Из плюсов и минусов: [+] Даст вызов нужных нам модулей по NP из любого приложения. [-] сделает переносимость модулей без правки namespace не обойтись. 2 Делать NP от текущей базовой папки приложения, например если мы в frontend то это /app/frontend/ если это модуль crud из первого варианта то базовая директория становится app/frontend/modules/crud Дальше NP отталкиваются от базовой папки. Что это дает: [+] Переносимость модулей в любое другую папку приложения, нету привязки жёсткой к пути даже для субмоделй вложеных в друг друга. [-] Невозможно вызвать контроллер из другого приложения Это сообщение отредактировал(а) Sanchezzz - 1.9.2013, 20:09 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
![]()
|
| Правила форума "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. |