league / di
Fast Dependency Injection Container for PHP 5.3+
Installs: 3 614
Dependents: 2
Suggesters: 0
Security: 0
Stars: 59
Watchers: 8
Forks: 5
Open Issues: 5
Requires
- php: >=5.3.0
Requires (Dev)
This package is not auto-updated.
Last update: 2022-02-01 12:26:21 UTC
README
DEPRECATED: Use Orno\Di instead as the two are incredibly similar, and theirs is more actively developed.
The League\Di library provides a fast and powerful Dependency Injection Container for your application.
Install
Via Composer
{
"require": {
"league/di": ">=1.1"
}
}
Usage
Get a Container Object
include 'vendor/autoload.php';
$container = new League\Di\Container;
Bind a concrete class to an interface
$container->bind('\Foo\Bar\BazInterface', '\Foo\Bar\Baz');
Automatic Dependency Resolution
The Di Container is able to recursively resolve objects and their dependencies by inspecting the type hints on an object's constructor.
namespace Foo\Bar;
class Baz
{
public function __construct(Qux $qux, Corge $corge)
{
$this->qux = $qux;
$this->corge = $corge;
}
public function setQuux(Quux $quux)
{
$this->quux = $quux;
}
}
$container->resolve('\Foo\Bar\Baz');
Defining Arguments
Alternatively, you can specify what to inject into the class upon instantiation.
Define Constructor Args
$container->bind('\Foo\Bar\Baz')->addArgs(array('\Foo\Bar\Quux', '\Foo\Bar\Corge'));
$container->resolve('\Foo\Bar\Baz');
Define Methods to Call with Args
$container->bind('\Foo\Bar\Baz')->withMethod('setQuux', array('\Foo\Bar\Quux'));
$container->resolve('\Foo\Bar\Baz');
Child Containers and Scope Resolution
A great feature of League\Di is it's ability to provide child containers with a separate resolution scope to that of it's parent container. If you bind a concrete class to an interface within one container, you can re-bind it in the child container, without fear of overwriting the original binding in the parent container.
Creating a Child Container
There are two ways to create a child container.
$child = $continer->createChild();
// OR
$child = new Container($container);
Using a Child Container
The primary benefit of using child containers is scope-specific resolution.
$container->bind('FooInterface', 'Foo');
// Assuming class Bar has a FooInterface dependency.
// This would use the Foo implementation.
$bar = $container->resolve('Bar');
// ...
$child = $container->createChild();
$child->bind('FooInterface', 'Baz');
// And this would use the Baz implementation.
$bar = $child->resolve('Bar');
TODO
- Extensive Documentation
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.