PHP 8.5 管道操作符和 Swoole 6.1 字符串方法,哪个语法更优雅?
PHP 8.5 版本中新增了一个管道操作符,可以将字符串或者数组操作,采用流式写法串联起来,而无需处理中间变量。它可以将许多“嵌套调用”替换成从左到右可读的链式结构。
PHP 8.4 及更早版本
$title = ' PHP 8.5 Released ';
$slug = strtolower(
str_replace('.', '',
str_replace(' ', '-',
trim($title)
)
)
);
var_dump($slug);
输出的结果为:
string(15) "php-85-released"
可以看到这个写法,多层嵌套的函数调用,逻辑是完全颠倒,最后的字符串转小写,需要写在最前面。如果换成多行写法,则需要引入多个中间变量。
$s1 = trim($title);
$s2 = str_replace(' ', '-', $s1);
$s3 = str_replace('.', '', $s2);
$slug = strtolower($s3);
PHP 8.5 New
-
RFC 文档:https://wiki.php.net/rfc/pipe-operator-v3
$title = ' PHP 8.5 Released ';
$slug = $title
|> trim(...)
|> (fn($str) => str_replace(' ', '-', $str))
|> (fn($str) => str_replace('.', '', $str))
|> strtolower(...);
var_dump($slug);
PHP 8.5新增的管道操作符,可以使用流式写法,第一次调用的结果将作为输入源传递给第二个调用,依次类推。不得不说这个写法确实很新颖,要比函数嵌套的方式可读性要好很多。
Swoole 6.1 的字符串方法
Swoole 6.1 版本新增的字符串方法语法,也可以实现流式的链式调用。
$slug = $title
->trim()
->replace(' ', '-')
->replace('.', '')
->lower();
var_dump($slug);
输出结果与前面两种写法完全一致。实际上完全可以可以压缩为一行,也不影响可读性:
$slug = $title->trim()->replace(' ', '-')->replace('.', '')->lower();
结语
如果是单纯字符串、数组的操作逻辑,相比PHP 8.5新增的管道操作符,Swoole 6.1的字符串方法语法更加优雅。但管道操作符的作用范围更广泛,各种函数均可使用流式写法进行装载,变为链式的顺序调用。 无论是管道操作符,还是字符串方法语法均比传统的PHP写法更优雅,简洁,可读性更强。
来源:swoole开源
THE END



