#9.1 php Пространства имен (namespace). Объявление нового пространства имен. Что это такое?
Primary tabs
Объявление нового пространства имен
Для объявления нового пространства имен (доступно, начиная с PHP 5.3) используется ключевое слово namespace
, после которого следует имя пространства
<?php namespace example; /*дальше идет какой-то код, для которого пространство имен example является текущим*/
Замечания:
- Зарезервированные имена
php
иPHP
не могут использоваться в качестве названий пользовательских пространств имен:<?php namespace php; //ошибка — имя php зарезервировано
- Объявление пространства имен должно предшествовать любому другому коду (кроме ключевого слова declare). В частности, например, такой код будет ошибочным:
<html> <?php namespace example; //ошибка — namespace должно идти первым в скрипте
Что такое пространство имен?
Пространство имен — это фрагмент программы, имеющий имя. Пространство имен можно описать как виртуальный каталог (подобно каталогам файловой системы), в котором группируется логически связанный между собой код. Имея доступ к пространству имен, можно получить доступ к объявленным внутри него:
- Классам (включая абстрактные);
- Трейтам;
- Интерфейсам;
- Функциям;
- Константам;
- а также вложенным пространствам имен и их элементам.
При этом, например, две функции с одинаковыми именами не могут использоваться в одном пространстве имен, но могут быть разнесены по двум разным пространствам. Как правило (хотя это не обязательно так), для каждого пространства создается свой физический файл.
Пример 1. Разнесение двух фунцкий с одинаковыми именами по разным пространствам имен
файл "cat.php":
<?php namespace cat; function speak() { echo "meow"; }
файл "dog.php":
<?php namespace dog; function speak() { echo "woof"; }
Несколько namespace
в одноим файле
Не рекомендуется описывать два и более пространства имен в одном файле. Однако в случае такой необходимости желательно применять синтаксис, при котором содержимое каждого пространства имен заключается в фигурные скобки. При объединении кода глобального пространства с кодом в каком-то другом пространстве такой синтаксис обязателен.
Пример 2. Два пространства имен в одном файле
<?php namespace cat { function speak() { echo "meow"; } } namespace dog { function speak() { echo "woof"; } } namespace { //глобальное пространство имен echo dog\speak(); }
Глобальное пространство имен. Переопределение стандартных констант, классов и функций
Одним из важных преимуществ использования пространств имен является предотвращение конфликтов имён пользовательских и встроенных PHP-функций.
Стандартные константы, классы и функции находятся в глобальном пространстве имен и могут быть перегружены в пользовательских пространствах. Например, стандартную функцию min() можем переопределить так, чтобы она сравнивала на минимум абсолютные значения переданных аргументов:
<?php namespace my; function min() { $arg_list = func_get_args(); $result = abs($arg_list[0]); for ($loop_index = 1; $loop_index < func_num_args(); $loop_index++) { $result = $result > abs($arg_list[$loop_index]) ? abs($arg_list[$loop_index]) : $result; } return $result; } echo min(-5, 3); //результат: 3
При этом обращение к стандартной функции глобального пространства тоже возможно через слеш :
echo \min(-5,3) //результат -5
Итак, находясь внутри пространства имен, мы можем обращаться к объявленным внутри него функциям, константам, классам и т.д., как обычно, просто по имени. В следующем разделе описывается, как использовать элементы некоторого пространства имен в другом (пользовательском или глобальном) пространстве.
- Log in to post comments
- 777 reads
vedro-compota
Mon, 10/16/2023 - 21:05
Permalink
точка запятой после названия пространства
по поводу:
обычно после объявления пространства имен ставят точку с запятой, не уверен что без этого вообще запустится:
_____________
матфак вгу и остальная классика =)
mariyas
Mon, 10/16/2023 - 21:30
Permalink
пока что черновик, потом весь
пока что черновик) потом весь код буду проверять