pine3ree/pine3ree-params-resolver

A function/method/invokable-object parameter resolution utility class

1.0.1 2025-06-12 13:30 UTC

This package is auto-updated.

Last update: 2025-06-12 13:34:36 UTC


README

Continuous Integration

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:

pine3ree/pine3ree-auto-resolve-factory