pine3ree / pine3ree-params-resolver
A function/method/invokable-object parameter resolution utility class
Package info
github.com/pine3ree/pine3ree-params-resolver
pkg:composer/pine3ree/pine3ree-params-resolver
1.0.1
2025-06-12 13:30 UTC
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: