aviator / pipe
使用简单的包装类链式调用可调用函数。
0.0.1
2017-11-06 16:43 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ~6.4.0
This package is auto-updated.
Last update: 2024-09-21 19:37:21 UTC
README
PHP代码可能会让人难以理解,尤其是在处理嵌套函数时。为什么不尝试链式调用这些函数呢?
$filter = function ($item) { return $item === 'SOME'; }; // Offputting one-liner echo implode('.', array_filter(explode('-', strtoupper(trim(' some-value'))), $filter)) // Multiple assignments $value = ' some-value'; $value = trim($value); $value = strtoupper($value); $value = explode('-', $value); $value = array_filter($value, $filter); echo implode('.', $value); // Easy to read pipe echo take(' some-value') ->trim() ->strtoupper() ->explode('-', '$$') ->array_filter($filter) ->implode('.', '$$') ->get(); // prints 'SOME'
安装
通过Composer
composer require aviator/pipe
测试
通过Composer
composer test
用法
获取一个Pipe
对象
$value = new Pipe('value'); $value = Pipe::take('value'); $value = take('value');
然后你可以链式调用可调用函数
$value->pipe('strtoupper');
并获得修改后的值
echo $value->get(); // prints 'VALUE'
管道方法是可链式的
echo Pipe::take(' value') ->pipe('trim') ->pipe('strtoupper') ->get(); // prints 'VALUE'
Pipe使用一个神奇的__call
将其他方法重定向到pipe
方法,所以你根本不需要使用pipe(...)
echo Pipe::take(' value') ->trim() ->strtoupper() ->get(); // prints 'VALUE'
参数
你可以使用带有参数的可调用函数
echo Pipe::take('value') ->str_repeat(3) ->strtoupper() ->get(); // prints 'VALUEVALUEVALUE'
Pipe
始终将你要修改的值(如上面的示例中的'value')作为第一个参数传递。
这通常有效,但由于PHP有一些独特的参数排序,有些情况下可能不适用。在这些情况下,你可以使用占位符,默认为$$
,来表示要修改的值。
例如,implode()
echo Pipe::take(['some', 'array']) ->implode('.', '$$') ->get(); // prints 'some.array'
因为implode()
将输入值作为其第二个参数,我们告诉Pipe
将其放在哪里,使用'$'。然后在调用时值被交换。
闭包
你可以将任何可调用函数传递给管道,包括闭包
$closure = function ($item) { return $item . '-postfixed'; }; echo Pipe::take('value') ->pipe($closure) ->get(); // prints 'value-postfixed'
其他内容
许可证
此包在MIT许可证(MIT)下运行。有关更多信息,请参阅LICENSE。
感谢
这主要基于Sebastiaan Luca的想法和他的Pipe\Item
类。