Download the PHP package mrclay/props-dic without Composer
On this page you can find all versions of the php package mrclay/props-dic. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download mrclay/props-dic
More information about mrclay/props-dic
Files in mrclay/props-dic
Package props-dic
Short Description Props is a simple DI container that allows retrieving values via custom property and method names
License MIT
Informations about the package props-dic
Props
Most Dependency Injection containers have fetch operations, like $di->get('foo')
or $di['foo']
, which don't allow your IDE to know the type of value received, nor offer you any help remembering/typing key names.
With Props, you access values via custom property reads $di->foo
or method calls $di->new_foo()
. This allows you to subclass the container and provide @property
and/or @method
PHPDoc declarations, giving your IDE and static analysis tools valuable runtime type information.
An example will help:
Here's a more complex example:
Since "slice" has a factory function set, we can call new_slice()
to get fresh instances from it:
Your IDE sees the container as a plain old class of typed properties, allowing it to offer suggestions of available properties, autocomplete their names, and autocomplete the objects returned. It gives you much more power when providing static analysis and automated refactoring.
Compatibility
Props\Container
implements ContainerInterface
.
Overview
You can specify dependencies via direct setting:
You can specify factories by setting a Closure
, or by using the setFactory()
method. These are functionally equivalent:
Resolved dependencies are cached, returning the same instance:
Using factories
If you don't want a cached value, use new_PROPERTYNAME()
to always fetch a fresh instance:
Regular value sets do not store a factory, so you may want to check hasFactory()
before you use new_PROPERTYNAME()
:
You can also get access to a set factory:
Extending a factory
Use extend
to have the return value of a factory filtered before it's returned:
Pimple with property access
If you're used to the Pimple API, try Props\Pimple
, which just adds property access. With that you can add @property
declarations and get the same typing benefits.
You can see an example that's similar to the Pimple docs.
Requirements
- PHP 8.1
License (MIT)
See LICENSE.