Нет ничего лучше или хуже в тех пространствах имен, о которых вы упоминаете.
Пространства имен были добавлены на язык, чтобы предотвратить столкновения имен в отдельных пакетах.
Например, вы можете иметь класс User
в своем собственном пространстве имен \MyApp\User
, а также использовать пакет третьей стороны, класс с именем User
, но в своем собственном пространстве имен \Package\User
.
Это была начальная идея. Позже люди решили, что мы можем использовать эти пространства имен для автоматической загрузки некоторых классов. Исходная идея заключается в том, что \MyApp\User
находится в MyApp/User.php
. Довольно просто.
Это продвинутое, конечно, что вы можете узнать больше, выполнив поиск «автозагрузку php» или «автозагрузку композитора».
И об этом начальном \
, в некоторых местах это не имеет значения, но это имеет значение в другом месте. При объявлении пространства имен это не имеет значения, например. namespace \MyApp\User
- то же, что и namespace MyApp\User
. Также оператор use
ведет себя следующим образом. Но когда вы собираетесь использовать класс, то есть new \MyApp\User()
против new MyApp\User
, он отличается. Вы можете найти дополнительную информацию в PHP documentation.
Хорошо, достаточно фона. Ваши вопросы конкретно.
Я знаю, что начальный \ не является обязательным, но какой префикс mydomain? Требуется ли это или необязательно?
Что касается случая с Laravel, то он не является обязательным. Посмотрите на composer.json
, под psr-4
вы обнаружите, что папка app
имеет определенный префикс для пространства имен. Это то, что вы должны использовать для своих классов (если они находятся в папке app
). Чтобы узнать больше, найдите PSR-4.
Имеет ли значение использование dev.mydomain.com или это только мой домен?
Я думаю, что я уже упоминал PSR-4, поэтому используйте все, что есть.
Это просто вопрос того же, что и имена папок?
Это также PSR-4. Узнайте больше об этом, и на все ваши вопросы ответят.
Но, короче говоря, у нас есть два стандарта для автозагрузки классов на основе пространств имен в PHP: PSR-0 и PSR-4.
В PSR-0 (старый), структура каталогов должна была соответствовать пространству имен точно, то есть, если ваш корневой папке были src
и вы класс был назван \Package\User
, то вы были src/Package/User.php
в файловой системе.
В PSR-4 у нас может быть префикс пространства имен для каталога. Например, вы говорите, что все, что находится в папке src
, начинается только с пространства имен \App\Package
. Класс a \App\Package\User
должен находиться в src/User.php
, с правильным пространством имен, конечно. Это то, что используется Laravel и большинство пакетов в эти дни.
Исходная косая черта относится к [глобальному пространству имен] (http://www.php.net/manual/en/language.namespaces.global.php). Не имеет значения, используете ли вы 'dev' или нет перед пространством имен. Это просто пространство имен. Имена папок не относятся к пространству имен как таковому, но некоторые загрузчики используют пространство имен как сопоставление для папок. Посмотрите [здесь] (https://daylerees.com/php-namespaces-explained/) для более подробного объяснения. – Andrew
Есть ли разница между 'myproject \ app \ контроллерами' и' \ app \ контроллерами' и 'app \ controllers'? – Maxcot
Да. Там есть. Согласно стандарту загрузки [psr-4] (http://www.php-fig.org/psr/psr-4/), который использует laravel, пространство имен должно быть '\ (\ ) * \ 'где' SubNamespaceNames' может быть сколько угодно. –
Andrew