mefworks / string-interpolation
通过用数组中的数据替换占位符来插值字符串。
Requires
- php: >=5.5
- mefworks/stringifier: ~1.0
- psr/log: ~1.0
Requires (Dev)
- phpunit/phpunit: 4.3.*
Provides
- psr/log-implementation: 1.0.0
This package is auto-updated.
Last update: 2024-09-09 13:34:35 UTC
README
mef\StringInterpolation 定义了一个接口 StringInterpolationInterface
,它描述了一种将任意数据数组与字符串组合的方法,类似于 PHP 方法 vsprintf
和 strtr
。
PlaceholderInterpolator
的核心实现将 {0}
和 {key}
替换为上下文数组中对应的值,但接口的其他实现可以自由使用任何语法。
建议插值器使用 mef\Stringifier 来将上下文数组中的非字符串值转换为字符串。
示例
PlaceholderInterpolator
<?php
$stringifier = new mef\Stringifier\Stringifier;
$interpolator = new mef\StringInterpolation\PlaceholderInterpolator($stringifier);
echo $interpolator('Hello, {name}!', ['name' => 'Matthew']), PHP_EOL;
echo $interpolator->getInterpolatedString('Index based 0: {0}, 1: {1}', ['one', 'two']), PHP_EOL;
示例输出
Hello, Matthew!
Index based 0: one, 1: two
Stringifier
负责将数组中的值转换为字符串。在这种情况下,所有值已经是字符串,所以这是一个有点不相关的细节。请注意,函数调用(第一个 echo)来自 AbstractStringInterpolator
,并不保证在所有插值器中存在,因为接口没有要求它。
更完整的示例可在 examples
目录中找到。
概述
mef\StringInterpolation\StringInterpolatorInterface
描述了两种方法
<?php namespace mef\StringInterpolation;
interface StringInterpolatorInterface
{
/**
* Given a string and an array of context, return a new Interpolation
* record, from which the interpolated string and unused context can be
* retrieved.
*
* The implementation details are left undefined.
*
* @param string $string The string to interpolate
* @param array|mef\StringInterpolation\ContextInterface $context
*
* @return mef\StringInterpolation\InterpolationInterface
*/
public function interpolate($string, $context);
/**
* Given a string and an array of context, return a new string with that
* context embedded in it.
*
* This MUST always give the same results as:
*
* ->interpolate($string, $context)->getString()
*
* This variation should be optimized when possible, as there's no need to
* create an Interpolation object or track unused context.
*
* @param string $string The string to interpolate
* @param array|mef\StringInterpolation\ContextInterface $context
*
* @return string
*/
public function getInterpolatedString($string, $context);
}
两种方法执行相同的底层操作。 getInterpolatedString(...)
返回与 interpolate(...)->getString()
相同的内容,但速度稍快,因为不需要创建 Interpolation
对象,并且不需要更新上下文。
插值器对象由此接口定义
<?php namespace mef\StringInterpolation;
interface InterpolationInterface
{
/**
* The interpolated string.
*
* @return string
*/
public function getString();
/**
* The used context.
*
* @return array
*/
public function getUsedContext();
}
上下文
提供给插值器的上下文可以是本机 PHP 数组或实现 ContextInterface
的对象。
ArrayContext
- 将数组包装成实现ContextInterface
的对象。
插值器
ExpressionInterpolator
- 将{key}
和{0}
视为占位符,并使用字符串插值器将它们替换为上下文数组中的对应值。值可以通过突变输出进行过滤。例如,{key|uppercase}
IndirectInterpolator
- 一个装饰器,在将其传递给内部插值器之前,从 ArrayAccess 对象中查找字符串格式。用于创建资源包很有用。PlaceholderInterpolator
- 与ExpressionInterpolator
类似,但不支持表达性语法。PrintFInterpolator
- 使用printf
样式的插值。
许可证
版权所有 (C) 2014 Matthew Leverton
特此授予任何获得此软件及其相关文档副本(“软件”)的人,无限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向提供软件的人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他原因,是否源于、源于或与软件或软件的使用或其他交易有关。