Каковы некоторые практические решения для пространства имен PHP? - PullRequest
1 голос
/ 08 ноября 2011

Это сценарий (он немного специфичен, но все же достаточно универсален, чтобы его можно было применить к любой PHP-библиотеке):

WordPress 3.2.1 или более ранние версии (доступна кодовая база PHP, PHP5 без расстояния между именами) ... Я создал небольшую библиотеку PHP с несколькими именами классов (WPAlchemy_MetaBox, WPAlchemy_MediaAccess) ... разработчики начали использовать классы в плагинах / темах, в которых WordPress может иметь много установленных (в одной и той же среде), поэтому вероятность использования двух или более плагинов с использованием библиотеки вероятна (очевидно, может возникнуть коллизия с именами классов)

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

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

  • предотвращение конфликтов имен
  • позволяет разработчикам использовать конкретную версию при желании

Если есть другие сообщения SO, которые решают эту проблему, пожалуйста, дайте мне знать, кроме того, пожалуйста, не стесняйтесь перефразировать вопрос с дополнительными целями.

1 Ответ

0 голосов
/ 09 ноября 2011

Для предотвращения столкновений используйте автозагрузчик (см. spl_autoload_register). Таким образом, если вы используете библиотеку совместно, и каждый из них использует автозагрузчик, конфликт имен классов (redeclare class fatal error) больше не будет происходить.

Это не решает проблему версии (например, иметь разные классы из одного и того же семейства, но с разными версиями).

Одним из простых решений (в сочетании с автозагрузчиком) является предложение библиотеки в качестве плагина. Каждый раз, когда библиотека получает обновление, обновляйте плагин. Плагин предлагает только автозагрузчик и классы.

Другие плагины, которые хотят использовать библиотеку, должны сделать вашу библиотеку-плагин зависимой, например. проверка его и указание пользователю установить его, если он недоступен, или просто установить его автоматически.

Если вы предложите пример плагина, который делает это для демонстрации (SDK), я думаю, что многие из библиотек, которые примут пользователи.

...