Download the PHP package code-distortion/di-caller without Composer
On this page you can find all versions of the php package code-distortion/di-caller. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download code-distortion/di-caller
More information about code-distortion/di-caller
Files in code-distortion/di-caller
Package di-caller
Short Description A PHP package that calls callables/callbacks/hooks, using dependency injection to resolve their parameters
License MIT
Homepage https://github.com/code-distortion/di-caller
Informations about the package di-caller
DI Caller
code-distortion/di-caller is a PHP package that instantiates classes, and calls callables / callbacks / hooks using dependency injection to resolve their parameters.
I built this to use in my own packages, where the caller wants to instantiate classes or pass callbacks, and the paramaters they actually need aren't know ahead of time. This package lets you specify the parameters you want to provide, and it resolves which ones are needed at call-time.
It isn't a Dependency Injection Container like those used in frameworks. Each callable is dealt with individually.
Table of Contents
- Installation
- Usage
- Instantiating Classes
- Running Callables
- Registering Parameters
- Registering Parameters by Type
- Registering Parameters by Name
- Registering Parameters by Position
- Union, Intersection and Variadic Types
- Exceptions
- Error Checking
- Checking When Instantiating Classes
- Checking When Running Callables
Installation
Install the package via composer:
Usage
There are three steps to using this package:
- Create a
DICaller
instance and pass the class you'd like to instantiate or callable you'd like to call, - Register the parameters you'd like to make available,
- Instantiate the class using
->instantiate()
or execute the callable using->call()
.
DICaller
will match the parameters you've registered to the constructor or callable signature.
Instantiating Classes
Instantiate classes by passing the class FQCN to DICaller
, and calling ->instantiate()
:
Running Callables
Call a callable by passing it to DICaller
, and running ->call()
:
Registering Parameters
Registering Parameters by Type
You can register parameters by type, which supports class-type and variable type (integer, string, etc).
In this example, more parameters are registered than are actually needed. Only the necessary ones are used.
For finer control, you can also specify their type explicitly (for class-types only):
Registering Parameters by Name
You can register parameters by name:
Registering Parameters by Position
You can register parameters by position (starting from 0):
Union, Intersection and Variadic Types
Union types are supported.
In this example, the parameter picked must be either an int
or a float
.
Note: Union types might not be processed in the same order as they're written in the signature, as DICaller uses Reflection which may alter the order.
Intersection types are supported.
In this example, the parameter must be both a ParentClass
and a ChildClass
.
Variadic parameters are supported, but are treated like normal parameters.
Exceptions
If the class can't be instantiated, a DICallerInstantiationException
is thrown when ->instantiate()
is called:
If a callable can't be called, a DICallerCallableException
is thrown when ->call()
is run:
Error Checking
Checking When Instantiating Classes
Before calling ->instantiate()
, you can check to see if the class can actually be instantiated using ->canInstantiate()
.
If the parameters satisfy the needs of the constructor, ->canInstantiate()
will return true
. Otherwise, it will return false
.
And you can check & instantiate in one step using ->instantiateIfPossible()
:
This will return the object, or null
if it can't be instantiated.
Checking When Running Callables
Before calling ->call()
, you can check that the callable is actually callable, and the parameters resolve properly using ->canCall()
:
And you can check & call it in one step using ->callIfPossible()
:
Note: This will return
null
when the call isn't possible, which isn't distinguishable from a successful call that returnsnull
on purpose.
Testing This Package
- Clone this package:
git clone https://github.com/code-distortion/di-caller.git .
- Run
composer install
to install dependencies - Run the tests:
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
SemVer
This library uses SemVer 2.0.0 versioning. This means that changes to X
indicate a breaking change: 0.0.X
, 0.X.y
, X.y.z
. When this library changes to version 1.0.0, 2.0.0 and so forth, it doesn't indicate that it's necessarily a notable release, it simply indicates that the changes were breaking.
Treeware
This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
Contributing
Please see CONTRIBUTING for details.
Code of Conduct
Please see CODE_OF_CONDUCT for details.
Security
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.