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),
    ]);
});