phpbench/container

Simple, configurable, service container.

Maintainers

👁 dantleech

Package info

github.com/phpbench/container

pkg:composer/phpbench/container

Statistics

Installs: 14 332 403

Dependents: 4

Suggesters: 0

Stars: 15

Open Issues: 1

2.2.3 2025-11-06 09:05 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 0c7b2d36c1ea53fe27302fb8873ded7172047196

  • Daniel Leech <daniel.woop@dantleech.com>

This package is auto-updated.

Last update: 2026-06-06 10:31:11 UTC


README

👁 Build Status

Simple, extensible dependency injection container with parameters and service tagging. Implements container interop.

Simple usage

$container = new Container();
$container->register('foobar', function (Container $container) {
 return new \stdClass();
});

Extending and Tagging

Extension classes should be passed as the first argument to the container (the user configuration is the second argumnet).

$container = new Container(
 [
 MyExtension::class
 ],
 [
 'foo.bar' => 'my_new_value',
 ]
);
$container->init(); // will trigger loading of the extensions.
class MyExtension implements ExtensionInterface
{
 public function load(Container $container)
 {
 $container->register('my_service', function (Container $container) {
 $service = new MyService(
 $container->getParameter('foo_bar'),
 $container->get('some_other_service')
 );

 foreach ($container->getServiceIdsForTag('tag') as $serviceId => $params) {
 $service->add($container->get($serviceId));
 }

 return $service;
 });

 $container->register('tagged_service', function (Container $container) {
 return new MyService(
 $container->getParameter('foo_bar'),
 $container->get('some_other_service')
 );
 }, [ 'tag' => [ 'param1' => 'foobar' ]);
 }

 /**
 * Return the default parameters for the container.
 *
 * @return array
 */
 public function getDefaultConfig()
 {
 return [
 'foo_bar' => 'this is foo'
 ];
 }
}