Пространства имен (namespaces) в PHP — это способ инкапсуляции и организации кода, предназначенный для решения двух основных проблем:
Пространство имен объявляется в начале файла с помощью директивы namespace
:
namespace MyProject\Database;
class Connection { /* ... */ }
Ключевые правила:
MyProject\Sub\Level
)Для доступа к классу из глобального пространства используйте обратный слеш:
$conn = new \MyProject\Database\Connection();
Оператор use
позволяет создавать псевдонимы:
use MyProject\Database\Connection;
$conn = new Connection();
use MyProject\Database\{Connection, QueryBuilder, Model};
use MyProject\Database\Connection as DBConnection;
// Файл: app/Models/User.php
namespace App\Models;
class User {
public function __construct() {
echo "User model created!";
}
}
// Файл: index.php
require 'app/Models/User.php';
use App\Models\User;
$user = new User(); // Создает экземпляр App\Models\User
namespace Company\Framework;
class Logger { /* ... */ }
namespace Company\External\Library;
class Logger { /* ... */ }
// Использование:
use Company\Framework\Logger as FrameworkLogger;
use Company\External\Library\Logger as ExternalLogger;
$frameworkLogger = new FrameworkLogger();
$externalLogger = new ExternalLogger();
Пространства имен работают и для функций/констант (требует явного указания function
или const
):
namespace MyProject\Helpers;
function debug($value) { /* ... */ }
const VERSION = '1.0';
// Использование:
use function MyProject\Helpers\debug;
use const MyProject\Helpers\VERSION;
debug('Test');
echo VERSION;
Современные автозагрузчики (как Composer) используют пространства имен для PSR-4 стандарта:
// composer.json
{
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}
Это позволяет автоматически загружать класс App\Models\User
из файла app/Models/User.php
.
Совместимость:
\
)PSR-4:
Оптимизация:
Производительность:
use
не влияет на производительностьпространства имен в PHP — мощный инструмент для организации кода, предотвращения конфликтов имен и создания более поддерживаемой кодовой базы. Их правильное использование особенно важно в крупных проектах и при интеграции сторонних библиотек.