A Simple PSR-11 Complaint Di Container
A Simple PSR-11 Complaint Di Container
Install the latest version with:
composer require 'corpus/di'
Getting started with Di the three most important methods follow.
set method is used to set either the item to return or a lambda to lazily construct it, optionally taking constructor arguments.get method is used to retrieve values with memoization after the initial lazy loading.getNew is used to invoke the lazy loading creation lambda every call, optionally taking an array of constructor arguments as a second parameter.
<?phprequire 'vendor/autoload.php';$di = new \Corpus\Di\Di;// Eager Loading$di->set('foo', new Foo);$di->get('foo'); // the Foo instance from above// --- --- --- --- --- ---// Lazy Loading$di->set('bar', function () {return new Bar;});// Value is memoized, new Bar() is only called once at first `get`.$bar1 = $di->get('bar');$bar2 = $di->get('bar');// --- --- --- --- --- ---// Constructor Parameters$di->set('baz', function ( $qux ) {return new Baz($qux);});// Calling getNew explicitly avoids the memoization. Constructor params passed as array.$baz = $di->getNew('baz', [ 'corge' ]);$baz2 = $di->getNew('baz', [ 'grault' ]);// --- --- --- --- --- ---// Auto-Constructor Parametrization$di->set('qux', Qux::class);$qux1 = $di->get('qux'); // New instance of Qux$qux2 = $di->get('qux'); // Memoized instance of Qux// --- --- --- --- --- ---// Lazy Loading with auto-arguments.$di->set('quux', function ( Qux $qux ) {return new Quux($qux);});$quux = $di->get('quux'); // Instance of Quux given the previous instance of Qux automatically// --- --- --- --- --- ---// getMany lets you retrieve multiple memoized values at once.[$foo, $bar] = $di->getMany([ 'foo', 'bar' ]);// getManyNew lets you retrieve multiple new values at once, providing for arguments.[$baz, $baz2] = $di->getManyNew([ [ 'baz', [ 'corge' ] ], [ 'baz', [ 'grault' ] ] ]);$di->callFromReflectiveParams(function (Bar $bar, Baz $baz){// Callable called with parameters automatically populated based on their name// $bar => 'bar'});// Construct a class auto-populating constructor parameters based on their name$controller1 = $di->constructFromReflectiveParams(MyController::class);$controller2 = $di->constructFromReflectiveParams('MyController');
function getMany(array $ids) : array
Retrieve multiple item; cached if existing. For use with list()
$ids - The names/keys of the items
function get($id)
Finds an entry of the container by its identifier and returns it.
$id - Identifier of the entry to look for.Throws: \Psr\Container\NotFoundExceptionInterface - No entry was found for this identifier.
Throws: \Psr\Container\ContainerExceptionInterface - Error while retrieving the entry.
function getManyNew(array $data) : array
Retrieve multiple item. For use with list()
$data - The array of (names/keys / argument) pair tuple of the itemsThrows: \InvalidArgumentException
function getNew(string $id [, array $args = []])
Retrieve an item
$id - The name/key of the item$argsThrows: \Corpus\Di\Exceptions\UndefinedIdentifierException
function duplicate(string $src, string $dest)
Clone a given value into a second key
$src - The source$dest - The destination
function set(string $id, $value)
Store a value via key to retrieve later
$id - The name/key of the item$value - The value to store
function has($id) : bool
Returns true if the container can return an entry for the given identifier.
Returns false otherwise.
has($id) returning true does not mean that get($id) will not throw an exception.
It does however mean that get($id) will not throw a NotFoundExceptionInterface.
$id - Identifier of the entry to look for.
function raw(string $id)
$id - The name/key to be retrievedThrows: \Corpus\Di\Exceptions\UndefinedIdentifierException
function constructFromReflectiveParams(string $className [, array $initials = []]) : object
Use reflection to execute a classes constructor with auto-populated parameters
$className - The class to construct$initials - An ordered list of arguments to populate initial arguments on constructor
function callFromReflectiveParams(callable $callable [, array $initials = []])
Use reflection to execute a callable with auto-populated parameters
$initials - An ordered list of arguments to populate initial arguments on callableThrown when attempting to retrieve a key that does not exist.