azbosakov / param-string-placeholders
具有可配置占位符分隔符的模板字符串。
Requires
Requires (Dev)
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';