Как частично добавить пространство имен PHP в библиотеку, не нарушая существующий код?

10

Моя компания создала модульную структуру PHP за эти годы, задолго до того, как в PHP 5.3 были добавлены пространства имен. Недавно мы решили начать использовать пространства имен в новом коде нашей библиотеки, и мы намерены в конечном итоге использовать пространство имен для старого кода. Однако у нас есть несколько проблем, которые мы пытаемся решить, чтобы определить, является ли добавление пространств имен в базу кода до v5.3 просто плохой идеей:

  1. Могу ли я использовать пространство имен для класса, а также импортировать (использовать) глобальное пространство имен, чтобы все глобальные классы не нуждались в \префиксе?
  2. Если мы поместим пространство имен в существующий класс в нашей библиотеке, как мы можем предотвратить разрушение всех существующих проектов после обновления инфраструктуры? Например, может ли библиотека изменить имя класса ThemeEngineна \module\theme\ThemeEngine, но существующие веб-сайты вызывают ThemeEngineбез какой-либо модификации кода? Если так, то как бы выглядел этот код?
скудный
источник

Ответы:

2
  1. Вы не можете использовать пространства имен вообще, к сожалению, только классы: http://www.php.net/manual/en/language.namespaces.importing.php . Редактировать: вы можете импортировать классы из глобального пространства имен, как это было сделано с ArrayObject в одном из примеров.

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

Мы в одной лодке с тобой, вроде. У нас есть какой-то старый код, который не использует пространства имен, но использует фейкер пространства имен _ (например, Zend_Db_Table ...), и у нас есть некоторый старый код, который даже не имитирует пространства имен. Вероятно, мы пойдем по тому же маршруту, но нам все еще нужно проверить, возможно ли это вообще. Удачи!

Pelshoff
источник
1

Да, в конце концов я использовал - «использовал» для импорта отдельных классов, которые мне были нужны

например, вместо добавления «/» перед всем, как:

\DateTime()

Я добавил под своим пространством имен

namespace MyProject;
use DateTime;

...
DateTime();     //without \
...
Stevanicus
источник