-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Lazy
github-actions[bot] edited this page Jul 17, 2026
·
1 revision
Сервисы и дорогие значения вычисляются при первом обращении — семантика
Pimple (shared/factory/protect) внутри реестра данных.
-
defer($key, $closure)— фабрика выполнится один раз при первомget(), результат материализуется в реестре (shared). -
factory($key, $closure)— новое значение на каждыйget(); результат не удерживается реестром (память не растёт). -
protect($key, $closure)— замыкание сохраняется как значение и возвращается без вызова. -
has()видит отложенные и фабричные ключи;all()отдаёт только материализованные значения;keys()/count()учитывают всё. - Исключение из фабрики не «портит» реестр: значение не запоминается,
повторный
get()повторит попытку.
use CloudCastle\Registry\Registry;
$services = new Registry();
$services->defer('db', static fn (): PDO => new PDO($dsn)); // соединение — лениво
$services->factory('запрос', static fn (): Request => Request::capture());
$services->protect('обработчик', static fn (int $x): int => $x * 2);
$services->get('db'); // PDO создан здесь, второй get — тот же объект
$services->get('запрос'); // каждый раз новый Request
$services->get('обработчик'); // само замыкание, без вызоваПовторный доступ к shared-сервису — обычный hash-lookup материализованного значения: ~11.7M ops/s против 6.3M у Pimple и 2.9M у illuminate/container.
CloudCastle Registry · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)