2015-06-28 2 views
1

Я новичок в использовании пространств имен в PHP, и они кажутся очень простыми. Однако, когда я добавил пространство имен в начало большого файла, содержащего классы, интерфейсы и блокировки, код вообще не работал. По-видимому, некоторые элементы не квалифицированы должным образом.php namespaces: что нужно квалифицировать?

Например:

<?php 
namespace MyNamespace; 
interface MyInterface { ... } 
class MyClass implements MyInterface { ... } 
... 

Я прочитал документацию на php.net, но я не мог найти простой список элементов, которые требуют квалификации в рамках единого имени пространства (глобально или иначе).

Итак, мой вопрос: если вы просто объявляете пространство имен в верхней части файла без пространства имен, какие элементы потребуют квалификации в этом сценарии?

+1

Как и в настоящее время, предполагается, что 'MyInterface' находится в пространстве имен' MyNamespace'. Чтобы получить 'MyInterface' из корневого/глобального пространства имен, используйте' \ MyInterface', это означает, что 'MyInterface' не помещается в имена. Если это пространство имен, вы должны сделать '\ TheNamespace \ MyInterface' или определить' \ TheNamespace \ MyInterface' в верхней части файла, чтобы вы могли просто использовать 'MyInterface' – PeeHaa

+0

« код вообще перестали работать »не очень понятный описание проблемы. Пожалуйста, предоставьте [полный пример простой части кода] (http://stackoverflow.com/help/mcve) с ожидаемым результатом и полученным результатом/сообщением об ошибке. – IMSoP

ответ

0

Теперь у вас есть все в одном файле, каждый класс, интерфейс или функция в этом файле теперь находится в пространстве имен MyNamespace. Поэтому изнутри этих классов, интерфейсов и функций, если вы хотите обратиться к классу, который находится в другом пространстве имен (глобальном или имени), вы должны использовать его полное имя (или использовать use операторов для объявления псевдонимов в верхней части файла) , Примечание: предварительно ожидающий a \ приведет вас к глобальному пространству имен.

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

MyNamespace\MyInterface 
MyNamespace\MyClass 

Следует также упомянуть, что это не типичная установка. Согласно стандартам psr, у вас должно быть только 1 класс на файл. Взгляните на http://www.php-fig.org/ для получения дополнительных рекомендаций по стандартам и практике.

Смежные вопросы