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