azbosakov/param-string-placeholders

具有可配置占位符分隔符的模板字符串。

1.0.0 2019-03-12 16:21 UTC

This package is auto-updated.

Last update: 2024-09-16 20:04:38 UTC


README

具有可配置占位符分隔符的模板字符串。可以采用以下形式,例如:

  • 'aaa{PARAM}bbb' O:'{', C:'}'
  • 'aaa{{PARAM}}bbb' O:'{{', C:'}}'
  • 'aaa${PARAM}bbb' O:'${', C:'}'
  • 'aaa%PARAM%bbb' O:'%', C:'%'
  • 'aaabbb' O:'<', C:'>'

占位符结构是:E* O P C,其中

  • O: 开启分隔符
  • P: 参数名称
  • C: 关闭分隔符
  • E: 转义字符串

O、C、E中的任何一个都不能为空''。

占位符作为构造函数参数传递:($template, $open, $close, $escape)。如果$open、$close或$escape中的任何一个为null,则使用类的默认值(可以通过::setDefaultDelimiters($open, $close, $escape)设置类级别的默认值)。

字符串被扫描以找到最近的非空OPEN/CLOSE对。

直接跟随CLOSE的OPEN不被视为占位符,而是直接引用。

O/C对之间的字符串是PARAM名称。它可以包含任何内容,但不能包含OPEN或CLOSE字符串。

如果占位符前面直接跟着1个或多个ESCape字符串,则将它们转换为单个一个。如果E字符串的数量是奇数,则占位符被转义,并以OPC的形式作为字符串的一部分被接受,不带最后一个ESC。

示例

使用 O:'{', C:'}', E:'!'

  • {} : 字符串 '{}'
  • {P} : 名称参数 'P'
  • !{P} : 字符串 '{P}'
  • !!{P} : 双重转义,字符串 '!' + 参数 'P'
  • !!!!!{P} : 两次双重转义和一个剩余的,转义占位符:字符串 '!!' + '{P}'

因此,模板

'aaa{}{{P1}bbb!!!{P2}ccc!!{P3}ddd'

被解析为

'aaa{}{', @ P1, 'bbb!{P2}ccc!', @ P3, 'ddd'

使用 O:'%', C:'%', E:'%'

  • '%%%%%P%%%' 是两个双重转义(%%+%%)-> 字符串 '%%' + 参数 P + 字符串 '%%'

方法

public function __construct(string $template, ?string $open = null, ?string $close = null, ?string $escape = null)

如果$open、$close或$escape中的任何一个为null,则使用类的默认值。

public function getPieces(): array

一个调试函数 - 返回将模板字符串分割的片段,占位符片段标记为'@ PHName'。

public function getDelimiters() : array

返回数组 ['open'=>..., 'close'=>..., 'escape'=>...]

public static function getDefaultDelimiters() : array

返回数组 - 类的默认分隔符:['open'=>..., 'close'=>..., 'escape'=>...]

public static function setDefaultDelimiters(?string $open = null, ?string $close = null, ?string $escape = null) : void

设置整个类的默认分隔符。如果其中任何一个为 null,则使用硬编码的默认值。

public function getTemplate() : string (ParamStringInterface)

获取传递给构造函数的模板字符串

public function withParam(string $name, $value) : self (ParamStringInterface)

克隆对象并设置命名参数值。

public function getParam(string $name) (ParamStringInterface)

通过名称获取参数

public function withParams(array $params) : self (ParamStringInterface)

克隆对象并一次性设置多个参数。

public function getParams() : array (ParamStringInterface)

获取参数快照

公共函数 __toString() : string (ParamStringInterface)

完整示例

$ph = new Placeholders(
    'The answer is <ans>, !<not a param>, !!<a param>, !!!<not a param>, !!!!<also param>',
    '<', '>', '!'
);

$ph = $ph->withParams(['ans'=>42, 'a param'=>'XXX', 'also param'=>'YYY']);

"$ph" == 'The answer is 42, <not a param>, !XXX, !<not a param>, !!YYY';