2017-02-15 15 views
0

Я использую разные версии подобной библиотеки для нескольких проектов. Библиотеки в пространстве имен, как это:Псевдоним псевдонима пространства PHP?

Проект А:

namespace Ewout\Project_A\Compatibility; 
Class Core {} 

Проект B:

namespace Ewout\Project_B\Compatibility; 
Class Core {} 

... и т.д.

Чтобы избежать использования полного пространства имен везде, я их псевдоним в файлах PHP проекта:

Проект A (a/main.php):

use Ewout\Project_A\Compatibility\Core as CoreX; 

Проект B (б/main.php):

use Ewout\Project_B\Compatibility\Core as CoreX; 

ли это нормально? Скрипты проекта могут загружаться одновременно, хотя мне никогда не понадобится псевдоним классов Project_A\Compatibility\Core и Project_B\Compatibility\Core в том же файле. В глобальном пространстве имен нет класса CoreX (из моих тестов это похоже на то, что это не вызовет никаких проблем?).

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

+1

Это не вызовет каких-либо конфликтов. Но проверьте свой код, прежде чем спрашивать. – Ad5001

+0

Я проверил это: «Я еще не видел ошибок PHP, жалующихся на конфликты, но хочу убедиться, что это не вызовет проблем в будущем». – Ewout

+0

О, извините, не видел. Но длинный а вы не комбинируете/main.php и /b/main.php, проблем не возникнет. – Ad5001

ответ

0

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

Кроме того, и это помогает понять основные процесса:

Как неквалифицированное имя класса как имя решимость?

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

Если есть оператор импорта, который псевдонизирует другое имя для имени, тогда применяется псевдоним импорта.

В противном случае имя текущего пространства имен добавляется к имени.

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

Более полезная информация в PHP документации: FAQ: things you need to know about namespaces