Core
Bindings
How `set()` and `singleton()` work, with explicit class and factory bindings.
set vs singleton
set() is transient (new resolve each call). singleton() is shared and cached in container instances map.
$container->set(FooFormatter::class, FooFormatter::class);
$container->singleton(BarCache::class, BarCache::class);
Factory binding
Use closure binding when constructor needs config values or runtime composition.
$container->singleton(Client::class, static function (ContainerInterface $container): Client {
$config = $container->get(Config::class);
return new Client([
'timeout' => (float) $config->get('http.client.timeout', 10.0),
]);
});