Intereting Posts
Как создать фрагмент контента для повторного использования, с которым я могу передать значение? Как получить заголовок / данные виджета Отображать конкретные виджеты в разных областях вокруг страницы Отображать и скрывать контент, используя флажок в разделе «Параметры Framework» Удаление запроса таксономии с помощью pre_get_posts Медиа-библиотека для отображения изображений только для пользователей Запросить и получить только заголовки сообщений, вместо того чтобы получать целые почтовые объекты Разная структура константы для каждой категории Интеграция настраиваемого типа сообщений в иерархию страниц работа с таблицей term_relationships SSL-перерывы WordPress CSS Получите meta_value определенной meta_key из всех сообщений, относящихся к определенному настраиваемому типу add_query_arg () для настраиваемого типа сообщений во всех видимых ссылках Подключиться к другой установке WP и захватить почту на основе настраиваемого поля Белый экран при активации плагина, который отправляет форму через WordPress

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

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 ) );