#9.2 php Использование пространств имен. Абсолютные и относительные имена
Primary tabs
Квалифицированное имя элемента (функции, класса и т.д) пространства имен состоит из префикса, определяющего пространство имен, слеша (\) и имени элемента:
namespace\element_name
Для обращения к любым элементам некоторого пространства имен всегда может использоваться его квалифицированное имя, начинающееся с ведущего слеша (\). Такое имя называется абсолютным. Например, абсолютное имя функции speak()
пространства cat
:
\cat\speak();
В зависимости от того, где происходит обращение к элементу пространства имен, по аналогии с файловой системой, допустимо использовать абсолютные или относительные (полные и неполные) имена. Возможны следующие варианты:
- Обращение к элементу некоторого пространства имен внутри этого пространства.
- Обращение к элементу некоторого пространства имен из глобального пространства имен.
- Обращение к элеменету некоторого пространства имен из другого пользовательского пространства имен.
- Обращение к глобальному пространству имен внутри пользовательского.
В втором и третьем случаях необходимо предварительно подключить файл с описанием нужного пространства имен:
<?php include "myNamespace.php";
1 случай. Обращение к элементу пространства имен из этого же пространства
В этом случае может использоваться неполное относительное имя, то есть имя функции, класса, интерфейса или константы без префикса. В следующем примере неполное имя функции title()
PHP автоматически преобразует к квалифицированному имени myNamespace\title()
.
<?php namespace myNamespace; function title() { echo "Пространство имен «myNamespace»"; } title();
Кроме того, для ссылки на текущее пространство можно использовать ключевое слово namespace
:
<?php namespace myNamespace; function title() { echo "Пространство имен «myNamespace»"; } namespace\title();
2 случай. Обращение к элементу пространства имен из глобального пространства имен
При обращении из глобального пространства имен может использоваться полное относительное имя элемента — его квалифицированное имя без ведущего слеша, но с указанием префикса, означающего пространство имен. Например,
<?php include "myNamespace.php"; myNamespace\title();
3 случай. Обращение к элементу пространства имен из другого пользовательского пространства имен
При обращении из пространства имен currentnamespace
относительное имя myNamespace\title()
будет автоматически преобразовано к виду currentnamespace\myNamespace\title()
(подробнее о вложенных пространствах имен написано в следующем разделе). Поэтому, если myNamespace
не является вложенным по отношению к текущему пространству имен, необходимо использовать абсолютное имя (с ведущим слешем) для доступа к его элементам:
<?php namespace currentnamespace; include "myNamespace.php"; \myNamespace\title();
Замечание:
Если для доступа к элементу пространства имен используются динамические имена (переменные, содержащие имена переменных), автоматического преобразования имени не происходит. В этом случае ведущий слеш можно не писать:
<?php namespace currentnamespace; include "myNamespace.php"; $title = 'myNamespace\title'; $title();
4 случай. Обращение к глобальному пространству имен из пользовательского
Используются абсолютные имена (с ведущим слешем) стандартных констант, функций и классов. Например,
<?php namespace myNamespace; echo \min(1, 2, 3);
Кроме того, для обращения к встроенным функциям и константам, если они не переопределялись в текущем пространстве, допустимо использование относительных имен:
<?php namespace myNamespace; echo min(1, 2, 3);
Однако это неверно для глобальных классов. Например, следующий код приведет к ошибке:
<?php namespace myNamespace; $obj1 = new \Exception(); //корректное обращение к глобальному классу Exception $obj2 = new Exception(); //ошибка — класс Exception не определен в пространстве имен myNamespace
- Log in to post comments
- 536 reads