PHP Простори імен / namespace
PHP Простори імен (namespace)
Простори імен — це кваліфікатори, які вирішують дві різні проблеми:
- Вони забезпечують кращу організацію, групуючи класи, які працюють разом для виконання завдання
- Вони дозволяють використовувати одне ім’я для кількох класів
Наприклад, у вас може бути набір класів, які описують таблицю 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\кваліфікатора:
namespace Html;
$table = new Table();
$row = new Row();
Спробуйте самі »
Псевдонім namespace / простору імен
Може бути корисно надати простору імен або класу псевдонім, щоб полегшити написання. Це робиться за допомогою ключового слова use
: