Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Пространства имён и 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/monolog

Composer скачает её в папку vendor/, допишет в composer.json и зафиксирует точные версии в composer.lock. Классы библиотеки доступны через тот же автозагрузчик — подключать её файлы вручную не нужно.

Что хранить в репозитории

ФайлХранитьЗачем
composer.jsonДаСписок зависимостей
composer.lockДаТочные версии для всех разработчиков
vendor/НетВосстанавливается командой composer install

Частая ошибка

Имя класса, имя файла и путь должны совпадать в точности, включая регистр букв. На Windows файл user.php для класса User сработает, а на сервере с Linux — нет: там user.php и User.php — разные файлы. Ошибка «класс не найден» после выкладки на сервер почти всегда означает несовпадение регистра.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.