Пространства имен в PHP
Пространства имен в PHP используются для предотвращения конфликтов имен между классами, интерфейсами, функциями и константами.
Пространства имен используются для группировки связанного кода под одним именем — чтобы избежать конфликтов имен, когда ваш код растет или когда вы используете код из нескольких источников.
Зачем использовать пространства имен?
- Чтобы избежать конфликтов имен, особенно в больших проектах
- Чтобы организовать код в логические группы
- Чтобы отделить ваш код от кода в библиотеках
- Чтобы позволить использовать одно и то же имя для нескольких классов без конфликта
Предположим, у вас есть набор классов, описывающих HTML-таблицу: Table, Row и Cell. Кроме того, у вас есть другой набор классов, описывающих мебель: Table, Chair и Bed. Здесь пространства имен могут использоваться для организации этих классов в две разные группы, что предотвращает смешивание двух классов Table.
Объявление пространства имен
Пространства имен должны объявляться в начале PHP-файла с помощью ключевого слова
namespace, за которым следует имя пространства имен.
Здесь мы объявляем пространство имен с именем Html:
<?php
namespace Html;
?>
Примечание: Объявление пространства имен должно быть самой первой вещью в PHP-файле! Следующий код недействителен:
<?php
echo "Привет мир!";
namespace Html;
...
?>
Все классы, интерфейсы, функции и константы, объявленные в этом PHP-файле, теперь будут принадлежать пространству имен Html:
Пример
Создайте класс Table в пространстве имен Html:
<?php
namespace Html;
class Table {
public $title = "";
public $rows = 0;
public function info() {
echo "<p>$this->title содержит $this->rows строк(и).</p>";
}
}
$table = new \Html\Table();
$table->title = "Моя таблица";
$table->rows = 5;
?>
<!DOCTYPE
html>
<html>
<body>
<?php
$table->info();
?>
</body>
</html>
Попробуйте сами »
Для дальнейшей организации можно использовать вложенные пространства имен:
Синтаксис
Объявите пространство имен с именем Html внутри пространства имен с именем Code:
<?php
namespace Code\Html;
?>
Использование пространств имен
Любой код, следующий за объявлением пространства имен, работает внутри этого пространства имен, поэтому классы, принадлежащие пространству имен, могут быть созданы без каких-либо квалификаторов. Для доступа к классам извне пространства имен к классу должно быть присоединено пространство имен.
Пример
Используйте классы из пространства имен Html:
<?php
$table = new Html\Table();
$row = new Html\Row();
?>
Попробуйте сами »
Когда одновременно используется много классов из одного пространства имен, проще использовать ключевое слово namespace:
Пример
Используйте классы из пространства имен Html без необходимости в квалификаторе Html\:
<?php
namespace Html;
$table = new Table();
$row = new Row();
?>
Попробуйте сами »
Псевдоним пространства имен
Может быть полезно дать пространству имен или классу псевдоним, чтобы упростить написание кода. Это делается с помощью ключевого слова use:
Пример
Дайте пространству имен псевдоним:
<?php
use Html as H;
$table = new H\Table();
?>
Попробуйте сами »