Configuration
Basic Setup
The container requires no configuration. Create an instance and start binding:
use WPZylos\Framework\Container\Container;
$container = new Container();
Binding Options
Standard Binding (Factory)
Each get() call creates a new instance:
$container->bind(Logger::class, fn() => new FileLogger());
$a = $container->get(Logger::class);
$b = $container->get(Logger::class);
// $a !== $b (different instances)
Singleton Binding
Same instance returned every time:
$container->singleton(Database::class, fn() => new Database());
$a = $container->get(Database::class);
$b = $container->get(Database::class);
// $a === $b (same instance)
Class Binding
Bind interface to concrete class:
$container->bind(CacheInterface::class, RedisCache::class);
Alias Binding
Create alternative names for services:
$container->singleton(DatabaseConnection::class, fn() => new MySQL());
$container->alias('db', DatabaseConnection::class);
$db = $container->get('db'); // Returns MySQL instance
Fluent Definition
Chain configuration on definitions:
$container->bind(EventHandler::class, MyHandler::class)
->share() // Make singleton
->addTag('event.handler'); // Add tag
Service Tagging
Group related services:
$container->bind(FileCache::class)->addTag('cache');
$container->bind(RedisCache::class)->addTag('cache');
// Retrieve all tagged services
$caches = $container->tagged('cache');