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();
}
?>