Defining multiple namespaces in the same file
Оновлено: 09.05.2023
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
В одному файлі може бути оголошено декілька просторів назв. Існує два допустимих синтаксиси.
Приклад #1 Оголошення декількох просторів імен, простий комбінований синтаксис
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
Цей синтаксис не рекомендується використовувати для об'єднання просторів назв в одному файлі. Замість цього рекомендується використовувати альтернативний синтаксис з дужками.
Приклад #2 Оголошення декількох просторів імен, синтаксис у дужках
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
?>
Об'єднання декількох просторів імен в одному файлі категорично не рекомендується як практика кодування. Основний випадок використання - об'єднання декількох PHP-скриптів в одному файлі.
Для поєднання глобального коду без простору назв з кодом у просторі назв підтримується лише синтаксис у дужках. Глобальний код слід вкладати в інструкцію простору імен без імені простору імен, як у випадку з in:
Приклад #3 Оголошення декількох просторів імен та код без просторів імен
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // global code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
Жоден PHP-код не може існувати поза дужками простору імен, за винятком відкриваючого оператора declare.
Приклад #4 Оголошення декількох просторів імен та код без просторів імен
<?php
declare(encoding='UTF-8');
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // global code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>