A small IoC Container for PHP
$ composer require runner/container
create an instance of the container, and bind services into the container with a name.
use Runner\Container\Container;
$container = new Container();
$container->bind('stack', SplStack::class);
$container->make('stack');
$container->bind(ArrayAccess::class, function () {
return new ArrayObject();
});
use an interface name as name and bind a concrete implementation to it
$container->bind(ArrayAccess::class, function () {
return new ArrayObject();
});
$container->make(ArrayAccess::class);
$container->bind(
'db',
function () {
return new PDO();
},
true
);
$container->bind();
just another way to binding singleton
$pdo = new PDO();
$container->instance('db', $pdo);
bind an alias as concrete to a registered service
$container->bind(CacheInterface::class, function () {
return new FileCache();
});
$container->bind('cache', CacheInterface::class, true);
$container->make('cache');
have fun :)
bind different implementation to classes while doing injecting
$container->bind(CacheInterface::class, function () {
return new FileCache();
});
$container->bind('redis_cache', function () {
return new RedisCache();
});
$container->bindContext(
PageController::class,
CacheInterface::class,
function (Container $container) {
return $container->make('redis_cache');
}
);
$controller = $container->make(PageController::class);
MIT