Пространства имён и Composer
Настоящий проект состоит из десятков и сотен файлов. Чтобы в них не запутаться, классы раскладывают по папкам, дают им составные имена и подключают автоматически. За это отвечают пространства имён и Composer.
Примеры этого урока состоят из нескольких файлов, поэтому здесь не запускаются.
Пространство имён
Каждый класс хранят в отдельном файле. Слово namespace в начале файла задаёт «папку» для имени класса:
<?php
// src/Models/User.php
namespace App\Models;
class User
{
public function __construct(public string $name) {}
}Полное имя этого класса — App\Models\User. Благодаря этому в проекте могут существовать два класса User — например, ваш и из чужой библиотеки, — и они не конфликтуют.
Использование класса
Чтобы не писать полное имя каждый раз, класс импортируют словом use:
<?php
// public/index.php
use App\Models\User;
require __DIR__ . '/../vendor/autoload.php';
$user = new User('Анна');
echo $user->name;Строка с require подключает автозагрузчик — о нём дальше.
Composer
Composer — менеджер зависимостей PHP. Он устанавливает библиотеки и создаёт автозагрузчик, который сам подключает файл с классом при первом обращении к нему. Настройки проекта лежат в файле composer.json:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Эта запись означает: классы, чьё имя начинается с App\, искать в папке src/. Класс App\Models\User должен лежать в файле src/Models/User.php. Такое соответствие имён и путей называется стандартом PSR-4.
После изменения настроек автозагрузчик пересоздают:
composer dump-autoloadУстановка библиотек
Библиотеку устанавливают одной командой:
composer require monolog/monologComposer скачает её в папку vendor/, допишет в composer.json и зафиксирует точные версии в composer.lock. Классы библиотеки доступны через тот же автозагрузчик — подключать её файлы вручную не нужно.
Что хранить в репозитории
| Файл | Хранить | Зачем |
|---|---|---|
composer.json | Да | Список зависимостей |
composer.lock | Да | Точные версии для всех разработчиков |
vendor/ | Нет | Восстанавливается командой composer install |
Частая ошибка
Имя класса, имя файла и путь должны совпадать в точности, включая регистр букв. На Windows файл user.php для класса User сработает, а на сервере с Linux — нет: там user.php и User.php — разные файлы. Ошибка «класс не найден» после выкладки на сервер почти всегда означает несовпадение регистра.