[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пространства имён
Arh
Всем привет.
Хочу разобраться с тем как правильнее писать неймспейсы, в psr-4 сказано что пространство должно начинаться с имени производителя.

Я пишу шаблонизатор для себя, но думаю его потом выложить в общий доступ, мало ли мож пригодится.

Сейчас у меня используются абсолютные пространства имён, то есть от корня сайта.
Например library/arh/Tpl; - файл library/arh/Tpl.php
А по стандарту нужно писать arh/Tpl;
Ну ладно, могу писать так, поправлю автозагрузчик, добавив "library" в инклюд.

Но как быть с остальными классами, которые по идее могут лежать где угодно?
Например: module/news/library/News.php
Какое у этого класса должно быть пространство имён?

Допустим этот модуль разработал Вася, ему писать:
vasya/module/news/news
или vasya/arh/module/news/news
или просто module/news/news но тогда не psr-4
или vasya/news/News и надеяться что у Васи не будет других проектов с именем news

А теперь начинаются костыли, потому что пространство не соответствует физическому пути к файлу, придётся писать какой то конфиг, в котором надо будет указывать что vasya/news/News это на самом деле module/news/library/News.php, что бы автозагрузчик подключил именно этот файл,
придумывать какие то механизмы рефлексии что бы не править постоянно днём и ночью эти настройки в ручном режиме.

Я правильно понимаю схему?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
keinhoj
Цитата
Я правильно понимаю схему?

нет, папка vendor/library там все классы, а не по всей системе
Arh
Цитата (keinhoj @ 2.12.2015 - 12:28)
Цитата
Я правильно понимаю схему?

нет, папка vendor/library там все классы, а не по всей системе

Так не получится.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
keinhoj
Ну точнее получиться, но будет неудобно и не красиво и криво.
Да и как тогда Васе писать пространство, что бы сразу понять что этот модуль написан для системы aaa, а не для системы bbb vendor/vasya/aaa/module/news/News.php ?
А так же он по мимо модуля напишет библиотеку vendor/vasya/aaa/library/News.php
Получится тоже самое, только на 2-3 уровня больше.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
bestxp
Какие-то выдуманные проблемы ну реально

1 смотрим как это уже сделано и работает и никому не мешает

Например возьмем Симфони у них модуль называеться бандл и навзвание Bundle должно встречаться в пространстве имен то есть например

Acme\DemoBundle;
и там класс отвечающий за загрузку бандла
AcmeDemoBundle

лежать могут они все где угодно и как угодно хоть вендор

vendor\acme\demo-bundle\src\AcmeDemoBundle.php
хоть
src\Acme\DemoBundle
хоть
vendor\acme\demo-bundle\src\Acme\DemoBundle\AcmeDemoBundle.php

все решаеться и описано в psr-0 psr-4 + правила именования в системе

а откуда узнает где брать? А есть автозагрузчик который
1 знает где лежат неймспесы и куда смотреть в данном случае composer
а что он включен решаеться на уровне AppKernel там инициализируеться Bundle


так что тебе стоит тогда для своей cms сделать правила именования модулей и все
и доработать загрузку,

либо как пример cms с плагинами и тд
https://octobercms.com/docs/plugin/registration

все должно иметь свой интерфейс либо получаешь хаос который ты описываешь и пытаешься его решить =) нужен другой путь

и да какая разница для какой системы написан ааа или ббб? Ставить то будет тот который нужен, ты не должен за него решать куда он будет ставить) ты должен ему сказать что вот с такими правилами твой плагин запуститься, а по таким нет
Arh
bestxp
Цитата
Какие-то выдуманные проблемы ну реально

Ну они реально выдуманные =) потому что я еще не преступал к реализации.

Цитата
лежать могут они все где угодно и как угодно хоть вендор

Я потому и задался вопросом, что бы избежать жесткой привязки библиотек к моей архитектуре.

В общем всё зависит от фантазии и каких то определённых паттернов нет?)

Цитата
и да какая разница для какой системы написан ааа или ббб?

Я понимаю что было бы круто взять модуль например из DLE и включить его в друпале, но там не только от классов зависит, есть еще уйма ньансов.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.