-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Reset
reset() сбрасывает накопленное состояние сервисов между запросами — для долгоживущих процессов (RoadRunner / Swoole / очереди), где контейнер переиспользуется. Аналог Symfony ResetInterface / kernel.reset.
Сервис, накапливающий состояние, реализует CloudCastle\DI\Contract\ResetInterface с методом reset(): void. Вызов Container::reset() проходит по всем созданным singleton'ам и вызывает reset() у тех, кто реализует контракт. Определения и singleton-кэш сохраняются — сбрасывается только состояние сервисов (не пересоздание).
use CloudCastle\DI\Contract\ResetInterface;
final class RequestContext implements ResetInterface
{
private array $data = [];
public function reset(): void { $this->data = []; }
}
// в воркере после каждого запроса:
$container->reset(); // RequestContext::reset() вызван, экземпляр тот же- Без утечек состояния между запросами в long-running воркерах — тот же контейнер, чистые сервисы.
- Экземпляры не пересоздаются: сброс дешевле полного rebuild.
- Работает и в compiled-контейнере.
- Сервис сам отвечает за корректный
reset()— забытое поле остаётся «грязным». - Не сбрасывает сервисы, не реализующие контракт (осознанный выбор — только stateful).
- Реализовывать
ResetInterfaceв сервисах с per-request состоянием (контекст запроса, буферы, кэши уровня запроса). - Вызывать
reset()в мидлваре/воркере на границе запроса.
- Держать per-request состояние в singleton без
reset()— источник утечек между запросами. - Использовать
reset()как замену корректному жизненному циклу scoped-сервисов (Scoped).
| Контейнер | Аналог |
|---|---|
| PHP-DI | нет (❌) |
| Symfony |
ResetInterface + services_resetter (эталон) |
| Laravel | частично через события/flush ( |
| Pimple | нет (❌) |
| Nette | нет (❌) |
CloudCastle и Symfony дают контракт сброса состояния для long-running процессов.
См. также: Scoped-сервисы · Compiled container.
CloudCastle DI · · PHP 8.1+ · PSR-11
GitHub · Packagist · Releases · Discussions · Сравнение
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)
- 🏗️ Архитектура
- ⚡ Быстрый старт
- 📊 Сравнение — 5 аналогов, таблица + победители
- 🧩 Возможности (детально) — каждая фича: принцип, +/−, аналоги
- 🧪 Bootstrap
- 🚀 Compiled container
- 🔗 Contextual binding
- 🤖 Autowiring
- 📄 Конфигурация
- 📖 Справочник конфигурации
- 📂 Сканирование классов
- 🌍 Глобальный реестр
- 🏷️ Теги и декораторы
- 🔗 call(), bind(), hooks
- 🔄 Прототипы, alias, lazy, lazyGhost
- 📋 Справочник API
- 🏭 Фабрики и singleton