gpt4 book ai didi

php - 通过几个函数运行一个变量

转载 作者:行者123 更新时间:2023-12-04 05:15:49 27 4
gpt4 key购买 nike

我试图通过几个函数运行一个变量以获得所需的结果。

例如,function to slugify a text像这样工作:

        // replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);

// trim
$text = trim($text, '-');

// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

// lowercase
$text = strtolower($text);

// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);

但是,我们可以看到这个例子中有一个模式。 $text变量通过 5 个函数调用传递,如下所示: preg_replace(..., $text) -> trim($text, ...) -> iconv(..., $text) -> strtolower($text) -> preg_replace(..., $text) .

有没有更好的方法可以编写代码以允许变量筛选通过多个函数?

一种方法是像这样编写上面的代码:
$text = preg_replace('~[^-\w]+~', '', strtolower(iconv('utf-8', 'us-ascii//TRANSLIT', trim(preg_replace('~[^\\pL\d]+~u', '-', $text), '-'))));

……但这种写作方式是一种笑话和 mock 。它阻碍了代码的可读性。

最佳答案

由于您的“功能管道”是固定的,因此这是最好的(并非巧合的是最简单的)方法。

如果管道是动态构建的,那么您可以执行以下操作:

// construct the pipeline
$valuePlaceholder = new stdClass;
$pipeline = array(
// each stage of the pipeline is described by an array
// where the first element is a callable and the second an array
// of arguments to pass to that callable
array('preg_replace', array('~[^\\pL\d]+~u', '-', $valuePlaceholder)),
array('trim', array($valuePlaceholder, '-')),
array('iconv', array('utf-8', 'us-ascii//TRANSLIT', $valuePlaceholder)),
// etc etc
);

// process it
$value = $text;
foreach ($pipeline as $stage) {
list($callable, $parameters) = $stage;
foreach ($parameters as &$parameter) {
if ($parameter === $valuePlaceholder) {
$parameter = $value;
}
}
$value = call_user_func_array($callable, $parameters);
}

// final result
echo $value;

See it in action .

关于php - 通过几个函数运行一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com