Build Status Coverage Status

Class and trait to perform string interpolation.

Installation

Install with Composer;

composer require phrity/util-interpolator

Using the Interpolator class

The interpolator will replace {$key} in input string with corresponding data in replacer array.

$interpolator = new Phrity\Util\Interpolator\Interpolator();
$result = $interpolator->interpolate('Interpolating {a} and {b}.', [
    'a' => 'first',
    'b' => 'second',
];
// $result -> 'Interpolating first and second.'

When replacers are nested in array or object, they can be accessed using path notation.

$interpolator = new Phrity\Util\Interpolator\Interpolator();
$result = $interpolator->interpolate('Interpolating {a.a} and {a.b} from {a}.', [
    'a' => [
        'a' => 'first',
        'b' => 'second',
    ],
];
// $result -> 'Interpolating first and second from array.'

Using the InterpolatorTrait trait

Interpolator is also available as trait method to be used in any class.

class MyClass
{
    use Phrity\Util\Interpolator\InterpolatorTrait;
    // ...
}

$myClass = new MyClass(); $result = $myClass->interpolate('Interpolating {a}', ['a' => 'b']);

Defining path separator

By default, paths are separated using "." but it is possible to define another separator.

Path access uses Phrity Accessor.

$separator = '/';
$input = 'Interpolating {a/b} and {a/c}.';
$replacers = ['a' => '{"b": "test", "c": 1234}'];

// Class $interpolator = new Phrity\Util\Interpolator\Interpolator(separator: $separator); $result = $interpolator->interpolate($input, $replacers); // $result -> 'Interpolating test.'

// Trait $myClass = new MyClass(); $result = $myClass->interpolate($input, $replacers, separator: $separator); // $result -> 'Interpolating test.'

Defining value transformer

To convert replacer values to strings the library uses Phrity Transformers.

The default configuration uses;

$transformer = new Phrity\Util\Transformer\FirstMatchResolver([
    new Phrity\Util\Transformer\ReadableConverter(),
    new Phrity\Util\Transformer\ThrowableConverter(),
    new Phrity\Util\Transformer\BasicTypeConverter(),
]);

You can also set another transformer (or set of transformers).

$transformer = new Phrity\Util\Transformer\JsonDecoder();
$input = 'Interpolating {a.b} and {a.c}.';
$replacers = ['a' => '{"b": "test", "c": 1234}'];

// Class $interpolator = new Phrity\Util\Interpolator\Interpolator(transformer: $transformer); $result = $interpolator->interpolate($input, $replacers); // $result -> Interpolating test and 1234.

// Trait $myClass = new MyClass(); $result = $myClass->interpolate($input, $replacers, transformer: $transformer); // $result -> Interpolating test and 1234.

Version PHP
1.0 ^8.1 Initial version