pine3ree / pine3ree-params-resolver
A function/method/invokable-object parameter resolution utility class
Installs: 2 160
Dependents: 4
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^7.4 || ^8.0
- pine3ree/pine3ree-reflection-helper: ^1.0
- psr/container: ^1.1.2 || ^2.0
Requires (Dev)
- phpspec/prophecy-phpunit: ^1.1 || ^2.0
- phpstan/phpstan: ^1.10 || ^2.0
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.5.7
- webimpress/coding-standard: ^1.3
README
ParamsResolver is an utility service that uses reflection to resolve parameters for a given callable performing look-up in the following order and matched against class/interface/parameter names:
- injected parameters,
- dependencies or parameters in the injected or composed container
- default values if available in the callable parameters
// API (pseudo-code) use My\Container; use pine3ree\Container\ParamsResolver; $params = new ParamsResolver($container); $params->resolve($callable, array $resolvedParams); // For a constructor the $callable argument would be: $callable = [My\Class::class, '__construct']; // or in general for any method: $callable = [string $fqcn, string $methodName];
Example:
In the following example the $db
and the $hydrator
dependencies are fetched
from the container, while the $config
parameter is provided and the $options
parameter receives the default
empty array value.
<?php use My\DataMapper; use My\Db; use My\Hydrator; use pine3ree\Container\ParamsResolver; class MyDataMapper { private Db $db; private Hydrator $hydrator; private array $config; private array $options; public function__construct( Db $db, Hydrator $hydrator, array $config, array $options = [] ) { $this->db = $db; $this->hydrator = $hydrator; $this->config = $config; $this->options = $options; } //... Rest of data-mapper code here } //... // include the container building code/file //... $params = new ParamsResolver($container); $args = $params->resolve([DataMapper::class, '__construct'], [ 'config' => [/*...*/], // a resolved value for the $config parameter ]); $myDataMapper = new DataMapper(...args);
A common usage of ParamsResolver is within a reflection based factory like the following: