Intereting Posts
Как определить параметр active_plugins option_value для включения и отключения определенных плагинов из базы данных? Отображать значение настраиваемого поля в столбце страницы администратора Запросить настраиваемый тип сообщения только в том случае, если он содержит другой настраиваемый тип сообщения Как правильно настроить MAMP и XIP Меню администратора как подменю из другого плагина Проблема с нижним колонтитулом и логином Настроить URL-адрес из the_terms Выход из системы не работает Пейджинг работает корректно в локальной версии, но не работает? Удалить проверку на стороне клиента по умолчанию для регистрации по умолчанию WordPress? Изменить порядок отправки по шаблону таксономии Постоянная ссылка /% postname% / не работает Запрос сообщения, включающего две таксономии с использованием API JSON Rest Приложения Mega WordPress WPMU или иным образом Мой пост повторяется на второй странице

Как назвать файлы классов с именами?

WP Core Handbook> Стандарты кодирования PHP> Соглашения об именах предлагают следующее для именования файлов с классами:

Имена файлов классов должны быть основаны на имени класса с добавленным классом, а подчеркивания в имени класса заменены на дефисы, например WP_Error :

 class-wp-error.php 

Хотя из формулировки раздела она предназначена главным образом для основного использования, стиль кодирования в целом обычно (и должен, на мой взгляд) применяться к стороннему WP-коду.

Однако, поскольку ядро ​​не поддерживает пространства имен (PHP 5.2, ugh), это не учитывает такой случай.

Каков практический способ сделать это с точки зрения удобства разработчиков? Поддержка автозагрузчиков?

Я видел несколько альтернативных способов:

  • игнорирование пространства имен вообще
  • включая пространство имен в имени файла
  • использование пространств имен в качестве уровней папок
  • используя альтернативную схему именования, такую ​​как PSR

Solutions Collecting From Web of "Как назвать файлы классов с именами?"

Во-первых, игнорируйте префикс class- . Это происходит из чистого процедурного кода WordPress, классы используются как контейнеры для процедурного кода, а не для реальных объектов, и большинство файлов не содержат классов вообще или классов и другого кода вместе. Это не имеет смысла, когда все ваши файлы содержат только один класс и ничего больше.
Если вы будете следовать этому шаблону, вам придется использовать interface-foo.php и trait-bar.php . Это не просто выглядит нелепо, это делает автоматическую загрузку сложнее, чем необходимо.

Самый простой способ разделения пространств имен и имен классов / интерфейсов / признаков – (по моему опыту) присваивать именам имен каталогов и именам классов именам файлов. Это упрощает сопоставление запрошенного класса с заданной структурой файла в автозагрузчике: просто конвертируйте \ в / , добавьте .php и загрузите файл.

Это упрощает кэширование запросов: для каждого каталога / пространства имен вы можете загружать все существующие файлы при первом запросе этого каталога, а для последующих вызовов вы можете повторно использовать этот список имен файлов, не запрашивая file_exists() каждый раз.

Я обычно собираюсь со второй половиной ваших вариантов:

  • использование пространств имен в качестве уровней папок
  • используя альтернативную схему именования, такую ​​как PSR

Если вы используете композитор для регистрации автозагрузчика PSR-4, вы можете оставаться рядом с соглашениями об именах WP. Пространства имен, сопоставленные с папками, которые могут содержать символы подчеркивания с файлами, названными как класс, который также может содержать символы подчеркивания. Подобно:

 <Namespace_Dir>/Class_Name.php 

Когда WP переходит на php 5.3+ (это должно произойти в конце концов, правильно ?!), рекомендации необходимо обновить. Поскольку PSR-0 уже устарел, PSR-4 должен быть рекомендован, если это не требуется.

Я сделал класс для этого требования, совместимый с PSR-4 и следуя стандартам WordPress.

Вы можете найти его здесь: https://github.com/pablo-pacheco/wp-namespace-autoloader

Объяснение есть все, но в основном это зависимость от композитора. Вам просто нужно потребовать его в своем проекте:

 "require": { "pablo-pacheco/wp-namespace-autoloader": "dev-master" } 

Затем вызовите класс

 <?php new \WP_Namespace_Autoloader( array( 'directory' => __DIR__, // Directory of your project. It can be your theme or plugin. __DIR__ is probably your best bet. 'namespace' => __NAMESPACE__, // Main namespace of your project. Eg My_Project\Admin\Tests should be My_Project. Probably if you just pass the constant __NAMESPACE__ it should work 'classes_dir' => 'src', // (optional). It is where your namespaced classes are located inside your project. If your classes are in the root level, leave this empty. If they are located on 'src' folder, write 'src' here ) );