Дата последнего изменения: 30.10.2021
Понятие
пространств имен
Пространство имён (англ. namespace) - некоторое множество, под которым подразумевается модель, абстрактное хранилище или окружение, созданное для логической группировки уникальных идентификаторов (то есть имён).
Подробнее...
позволяет давать элементам системы более четкие имена, избавиться от множества префиксов имен, а также избежать потенциальных конфликтов. Все классы, поставляемые в стандартном дистрибутиве, должны находиться в пространстве имен Bitrix, которое не пересекается ни с PHP, ни с разработками партнёров. Каждый стандартный модуль определяет в пространстве имен Bitrix свое подпространство, совпадающее с именем модуля. Например, для модуля forum пространством имен будет Bitrix\Forum, а для модуля main - Bitrix\Main.
namespace Asd\Metrika; class CountersTable extends Entity\DataManager { ....
Это значит, что данный класс (в /lib/
) принадлежит модулю asd.metrika и к нему (после подключения указанного модуля) можно обращаться так:
\Asd\Metrika\CountersTable::update();
Сам класс лежит в файле asd.metrika/lib/counters.php
.
При необходимости модуль может организовывать подпространства внутри своего пространства имен. Например, Bitrix\Main\IO, Bitrix\Forum\SomeName\SomeNameTwo. Но такой возможностью следует пользоваться только если это оправдано для организации правильной архитектуры данного модуля.
Примеры:
namespace Bitrix\Main\Localization; namespace Bitrix\Main\Entity\Validator;
Сокращения, не являющиеся общепринятыми (в Bitrix Framework), использовать нельзя.
Это можно сделать:
Допустимо сокращение полной записи. Вместо \Bitrix\Main\Class::Function()
можно писать Main\Class::Function()
.
Также допустимо и использование синонимов, вместо длинных пространств имен. Для этого необходимо использовать use
. Например, мы имеем длинную конструкцию:
\Bitrix\Main\Localization\Loc::getMessage("NAME");
Чтобы сократить ее, объявим в начале файла синоним и далее уже будем использовать сокращенный вариант вызова:
use \Bitrix\Main\Localization\Loc; ... Loc::getMessage("NAME");
Список ссылок по теме: