giuscris/interpolator

🚩 PHP中的类似JavaScript的字符串插值

dev-main 2022-02-12 14:53 UTC

This package is auto-updated.

Last update: 2024-09-12 20:36:26 UTC


README

PHP中的类似JavaScript的字符串插值。

用法

标量值

将变量数组传递给StringInterpolator构造函数,然后使用StringInterpolator::interpolate()方法进行字符串插值,其中变量可以包含在${}之间

use Interpolator\StringInterpolator;

$interpolator = new StringInterpolator(['name' => 'John']);

echo $interpolator->interpolate('Hello ${name}'); // Hello John

您还可以使用索引符号访问数组键

$interpolator = new StringInterpolator(['numbers' => [77, 22, 31, 194]]);

echo $interpolator->interpolate('The third number is ${numbers[2]}'); // The third number is 31

字符串键也可以使用点符号访问

$interpolator = new StringInterpolator(['person' => ['name' => 'John', 'age' => 29]]);

echo $interpolator->interpolate('${person.name} is ${person.age} years old'); // John is 29 years old

对象

可以使用点符号访问公共属性

$person = new stdClass();

$person->name = 'John';
$person->age = 29;

$interpolator = new StringInterpolator(['person' => $person]);

echo $interpolator->interpolate('${person.name} is ${person.age} years old'); // John is 29 years old

但是您也可以调用方法和常量

class ExampleClass
{
    public const ID = '#ExampleClass';

    private int $timestamp;

    public function __construct()
    {
        $this->timestamp = time();
    }

    public function getDate()
    {
        return date('Y-m-d', $this->timestamp);
    }
}

$interpolator = new StringInterpolator(['obj' => new ExampleClass()]);

// The object #ExampleClass has this date: 2022-02-12
echo $interpolator->interpolate('The object ${obj.ID} has this date: ${obj.getDate()}');

您还可以传递闭包,并且它们将被调用

$interpolator = new StringInterpolator(['print' => function ($value) {
    return print_r($value, true);
}]);

// These are some values: Array ( [foo] => bar [0] => 4 [1] => 27 )
echo $interpolator->interpolate('These are some values: ${print(["foo" => "bar", 4, 27])}');