kolyunya/string-processor

1.0.0 2017-04-20 13:22 UTC

This package is auto-updated.

Last update: 2024-09-10 23:12:07 UTC


README

状态

Build Status Code Climate Latest Stable Version

描述

此库提供了一系列字符串处理器。

安装

此库支持composer。在项目中使用它,建议通过composer引入。

composer require kolyunya/string-processor

单个处理器使用

基本使用

每个处理器实现了一个ProcessorInterface接口,该接口包含process方法

/**
 * Processes a string and returns a processed version of the original string.
 * @param string $string A string to process.
 * @return string A processed version of the original string.
 */
public function process($string);

构建一个处理器,并在其上运行process($string)

$processor = new Processor();
echo $processor->process($string);

简短使用

您也可以不实例化处理器就直接使用它。每个处理器都有一个静态的run方法。

/**
 * Processes a string and returns a processed version of the original string.
 * @param string $string A string to process.
 * @param object|array $parameters Parameters passed to the processor's constructor.
 * @return string A processed version of the original string.
 */
public static function run($string, $parameters = array());

您可以在$parameters数组中向处理器构造函数传递参数。您也可以直接传递一个参数,无需将其包装在数组中。

echo KebabCaseFormatter::run('snake_case'); // Output: "snake-case"
echo Translator::run(
    'Лорем ипсум долор сит амет',
    new RuEnDictionary()
); // Output: "Lorem ipsum dolor sit amet"

处理器组合

Multiprocessor的使用

存在一个特殊的处理器(Multiprocessor),允许您在一个处理器中组合多个处理器。假设您想将字符串转换为UPPER-KEBAB格式。您可以使用Multiprocessor组合两个处理器来解决此问题。

$processor = new Multiprocessor([
    new KebabCaseFormatter(),
    new UpperCaseFormatter(),
]);
echo $processor->process('snake_case'); // Output: "SNAKE-CASE"
echo $processor->process('CamelCase'); // Output: "CAMEL-CASE"

UpperCaseFormatter将在KebabCaseFormatter之后应用。请注意,在第一个示例中,处理器的顺序无关紧要,但在第二个示例中实际上是重要的。

另一个常见的问题示例是生成URL别名。应从字符串中移除标点符号,将其转换为kebab-case并转写。使用Multiprocessor组合PunctuationStripperKebabCaseFormatterTranslator

$processor = new Multiprocessor([
    new RuEnTranslator(),
    new AlphabeticalPurifier(),
    new KebabCaseFormatter(),
]);
echo $processor->process('Лорем ипсум долор сит амет'); // Output: "lorem-ipsum-dolor-sit-amet"
echo $processor->process('Привет, Мир!'); // Output: "privet-mir"

处理器装饰

每个处理器都是一个装饰器。ProcessorInterface接口包含decorate方法。

/**
 * Decorates supplied processor with the current processor.
 * @param ProcessorInterface $processor Processor to decorate.
 * @return ProcessorInterface Current processor.
 */
public function decorate(ProcessorInterface $processor);

这意味着上述示例可以使用处理器装饰来实现。虽然使用Multiprocessor的方式更具可读性。

$processor =
(new RuEnTranslator())->decorate(
    (new KebabCaseFormatter())->decorate(
        (new PunctuationStripper())
    )
);
echo $processor->process('Лорем ипсум долор сит амет'); // Output: "lorem-ipsum-dolor-sit-amet"
echo $processor->process('Привет, Мир!'); // Output: "privet-mir"

可用的处理器

目前实现了以下处理器