Intereting Posts
Неустранимая ошибка: вызов неопределенной функции wp_create_nonce () Включить шаблон, если сообщение является отдельным продуктом Использование add_rewrite_rule () для перенаправления на главную страницу Как установить правильную $ content_width, когда на одной странице есть две ширины содержимого? Пользовательский размер изображения Woocommerce add_query_arg не работает Загрузка изображения через FTP в медиатеку WordPress изменить статус страницы с кодом Как предотвратить дублирование сообщений при просмотре пользовательского таксономического термина Создание настраиваемого поля при активации темы Как включить последнее сообщение определенной категории на соответствующей странице Есть ли способ измотать update_option для модульного тестирования? Самый простой способ запроса с помощью blog_id? WordPress на локальной машине, перенаправляющей на онлайн-адрес Плагин для обмена на социальных сайтах?

Что происходит, когда два плагина имеют один и тот же сторонний класс, включенный в них?

Я создаю плагин, который использует Stripe для обработки платежа. Я включил PHP-библиотеку Stripe в свой плагин, и все отлично работает. Но что, если кто-то еще делает плагин, который также использует Stripe … или, что еще хуже, более старую версию Stripe, которая не совместима с моей? Похоже, что могут быть конфликты, если у кого-то оба наших плагина активируются одновременно.

Нужно ли мне пространство пространств имен? Это целесообразно? Я предполагаю, что это кошмар для обслуживания, если я когда-либо захочу перейти на более новую версию библиотеки Stripe.

Я полностью согласен с этим, но я хочу, чтобы я следил за лучшими практиками.

Благодаря! Тони

Solutions Collecting From Web of "Что происходит, когда два плагина имеют один и тот же сторонний класс, включенный в них?"

Я пошел вперед, а имена переместились на полосу. Все отлично работает. И теперь мне не нужно беспокоиться о том, чтобы какая-либо другая библиотека Stripe испортила мои вещи.

Оригинал:

namespace Stripe; 

Новое:

 namespace MyRadNamespace\Stripe; 

Если кто-то заинтересован в том, как это делается, не стесняйтесь просматривать мое репо:

https://github.com/Spokane-Wordpress-Development/Freezy-Stripe

Ура!

Когда я просмотрел ссылку на репо, прилагаемую к ответу, я заметил невероятное количество заявлений о requice в одном файле. Основная проблема заключается в том, что в репо отсутствует автозагрузчик, который может быть оптимизирован по всему проекту, а также то, что плагин включает все эти файлы независимо от того, при необходимости или нет.

Когда вы начинаете использовать Composer для управления вложениями, вы обнаружите, что он создает файл autoload.php для каждого отдельного пакета, который вы пишете (или выбираете). Затем вы можете создавать полные проекты, используя Composer в качестве диспетчера пакетов, который в качестве приятного побочного эффекта также создает централизованный файл autoload.php вместо одного автозагрузчика для каждого включенного пакета (плагин / тема / etc). В дополнение к этому одиночному автозагрузчику Composer также создает карту «Class> File» в качестве «кеша», чтобы избежать как можно большего количества чтения на диске, что позволит как можно быстрее отслеживать класс.

Это позволит избежать использования пространства имен, помещаемых в именах поставщиков. Это означает, что в случае, если в нескольких пакетах есть файл composer.json , будет только одно место, где эти пакеты поставщиков будут сохранены (следовательно, сохраняются полосы пропускания и места на диске) и извлекаются из. Даже если вы не игнорировали файлы поставщиков в контролируемом VCS пакете, их больше не нужно загружать.

 # Before in Package (A) $stripe = new \MyRadNamespace\Stripe; # Before in Package (B) $stripe = new \MyFunkyNamespace\Stripe; # After – anywhere! $stripe = new \Stripe; 

Если плагин или тема еще не поддерживают Composer, вы можете просто получить его через службу прокси / зеркало WPackagist .

Чтобы быстро начать работу с менеджером пакетов Composer, я предлагаю использовать wecodemore / wpstarter by @gmazzap – docs здесь .