Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Проект

Проект конфигурируется в классе, наследуемом от AbstractProject.

В конструкторе передаются данные (путь генерации, параметры), а в definition() — зависимости и их поведение.

src/Project.php

<?php

declare(strict_types=1);

namespace App;

class Project extends \Cekta\DI\AbstractProject
{
    public function __construct(public readonly array $env = getenv())
    {
        parent::__construct(
            filename: __DIR__ . '/../Container.php',
            fqcn: 'App\Container',
            params: [
                \PDO::class . '$dsn' => $env['DB_DSN'] ?? 'sqlite:' . __DIR__ . '/../mydb.sqlite',
            ],
        );
    }

    public function definition(): array
    {
        return [
            'entries' => [
                \App\Example::class,
            ],
            'alias' => [
                \Psr\Log\LoggerInterface::class => \Monolog\Logger::class,
            ],
            'singletons' => [
                \App\Service\Cache::class,
            ],
            'factories' => [
                \App\Service\RequestHandler::class,
            ],
        ];
    }
}

Конструктор

ПараметрНазначениеПодробнее
filenameПуть к файлу сгенерированного контейнера—
fqcnПолное квалифицированное имя класса контейнера—
paramsСкалярные значения для аргументов конструкторовПараметры

Зависимости

В методе definition() задаются зависимости и их поведение:

КлючНазначениеПодробнее
aliasПривязка интерфейсов и абстракций к реализациямАлиасы
singletonsОдин экземпляр на весь PHP-процессЖизненный цикл
factoriesНовый экземпляр при каждом get()Жизненный цикл

💡 Классы, указанные в entries, по умолчанию ведут себя как scoped — один экземпляр на контейнер. Полное сравнение жизненных циклов — в разделе «Управление жизненным циклом».