WP Core Handbook> Стандарты кодирования PHP> Соглашения об именовании предлагают следующее для именования файлов с классами:
Имена файлов классов должны быть основаны на имени класса с
class-
префиксом, а подчеркивания в имени класса заменены дефисами, напримерWP_Error
:class-wp-error.php
В то время как из формулировки раздела он в основном предназначен для базового использования, стиль кодирования в целом обычно (и, на мой взгляд, должен) применяться к стороннему коду WP.
Однако, поскольку ядро не поддерживает пространства имен (PHP 5.2, тьфу), это не учитывает такой случай.
Каков практический путь для этого с точки зрения удобства разработчика? Поддержка автозагрузчиков?
Я мог видеть несколько альтернативных способов:
- полностью игнорируя пространство имен
- включая пространство имен в имени файла
- используя пространства имен в качестве уровней папок
- используя альтернативную схему именования, такую как PSR
oop
coding-standards
Rarst
источник
источник
Ответы:
Во-первых, игнорируйте
class-
префикс. Это происходит из подхода чистого процедурного кода WordPress, классы используются в качестве контейнеров для процедурного кода, а не для реальных объектов, и большинство файлов вообще не содержат классов или классов и другого кода вместе. Это не имеет смысла, когда все ваши файлы содержат только один класс и ничего больше.Если вы будете следовать этой схеме, вам придется использовать
interface-foo.php
иtrait-bar.php
. Это не просто смешно, но и делает автоматическую загрузку тяжелее, чем необходимо.Самым простым способом разделения пространств имен и имен классов / интерфейсов / признаков является (по моему опыту) назначение пространств имен именам каталогов и именам классов именам файлов. Это делает его очень легко сопоставить требуемый класс данной структуры файла в автопогрузчика: просто конвертировать
\
в/
, Append.php
и загрузить файл.Это также упрощает кеширование поиска: для каждого каталога / пространства имен вы можете извлечь все существующие файлы при первом запросе каталога, а для последующих вызовов вы можете повторно использовать этот список имен файлов, не запрашивая
file_exists()
каждый раз ,источник
Я сделал класс для этого требования, совместимый с PSR-4 и следуя стандартам кодирования Wordpress.
Вы можете связаться с ним здесь: https://github.com/pablo-pacheco/wp-namespace-autoloader
Все объяснение есть, но в основном это зависимость от композитора. Вы просто должны потребовать это в своем проекте:
А потом позвоните в класс
источник
Я вообще собираюсь со второй половиной ваших вариантов:
Если вы используете composer для регистрации автозагрузчика PSR-4, вы можете придерживаться соглашений об именах WP. Пространства имен, сопоставленные с папками, которые могут содержать подчеркивания с файлами, названными как класс, который также может содержать подчеркивания. Подобно:
Когда WP переходит на php 5.3+ (это должно произойти в конце концов, верно ?!), руководящие принципы должны быть обновлены. Поскольку PSR-0 уже устарел, PSR-4 следует по крайней мере рекомендовать, если не требуется.
источник
Решение pablo-sg-pacheco сработало для меня, автозагрузка опиралась на composer, но совместима со стандартами кодирования WordPress, однако URL для репозитория Github:
https://github.com/pablo-sg-pacheco/wp-namespace-autoloader
и имя пакета:
Наконец, вам также нужно добавить следующее в ваш composer.json, потому что пакет не доступен в packagist:
источник