tomphp / transform
一套工具,使 array_map 和 array_filter 更加友好。
v0.2.4
2016-03-27 13:03 UTC
Requires
- php: >=5.6
Requires (Dev)
- fabpot/php-cs-fixer: ^1.10
- phpunit/phpunit: ^5.1
- squizlabs/php_codesniffer: *
- tomphp/php-standards: ^0.1.0
Suggests
- gmazzap/pentothal: Predicate library which helps create nicer filters
README
Transform 是一个简单的库,旨在使使用 PHP 的 array_map
函数体验更加愉快,并最终得到更干净的代码。
Transform 是一组用于常见转换操作的辅助函数。
要查看一个使您的 array_filter
代码也看起来很棒的谓词库的绝佳伴侣,请参阅 Pentothal。
命名空间
从现在起,假设使用 TomPHP\Transform
命名空间,如下所示
use TomPHP\Transform as T;
示例
看看这段代码
$names = array_map( function ($user) { return $user->getName(); }, $allUsers );
使用 Transform,它看起来像这样
$names = array_map(T\callMethod('getName'), $allUsers);
安装
使用 composer
composer require tomphp/transform
链式操作
可以使用 chain
函数组合多个转换。
T\chain(T\getProperty('user'), T\getElement('name')); // Is equivalent to: function ($object) { return $object->user['name']; }
遍历构建器
如果您想将一系列 callMethod
、getProperty
和 getElement
调用链接在一起,__()
函数提供了一个构建器,以便以更优雅的方式编写。
考虑
$dobs = array_map( function (User $user) { return $user->getMetaData()['dob']->format('Y-m-d'); }, $users );
使用构建器,您可以简单地编写
use function TomPHP\Transform\__; $dobs = array_map(__()->getMetaData()['dob']->format('Y-m-d'), $users);
转换
对象转换
T\callMethod(string $methodName, mixed ...$args)
T\classMethod('getName'); // Is equivalent to: function ($object) { return $object->getName(); }
T\classMethod('format', 'Y-m-d'); // Is equivalent to: function ($object) { return $object->format('Y-m-d'); }
T\callStatic(string $methodName, mixed ...$args)
T\callStatic('getSomethingWith', 'param1', 'param2'); // Is equivalent to: function ($object) { return $object::getSomethingWith('param1', 'param2'); } // or to: function ($classAsString) { return $classAsString::getSomethingWith('param1', 'param2'); }
T\getProperty(string $name)
T\getProperty('name'); // Is equivalent to: function ($object) { return $object->name; }
数组转换
T\getElement(string|int $name)
T\getElement('name'); // Is equivalent to: function ($array) { return $array['name']; }
T\getElement(['user', 'name']); // Is equivalent to: function ($array) { return $array['user']['name']; }
字符串转换
T\prepend(string $prefix)
T\prepend('prefix: '); // Is equivalent to: function ($value) { return 'prefix: ' . $value; }
T\append(string $suffix)
T\append(' - suffix'); // Is equivalent to: function ($value) { return $value . ' - suffix'; }
T\concat(...$arguments)
将 __
用作您希望插入值的占位符
use const TomPHP\Transform\__; T\concat('Hello ', __, '!'); // Is equivilent to: function ($value) { return 'Hello ' . $value . '!'; }
泛型转换
T\argumentTo(callable $callable, array $argments = [__])
T\argumentTo('strtolower'); // Is equivalent to: function ($value) { return strtolower($value); }
您还可以使用 __
作为占位符提供一个参数列表,以便在您希望插入值的位置插入。
use const TomPHP\Transform\__; T\argumentTo('strpos', ['Tom: My name is Tom', __, 4]); // Is equivalent to: function ($value) { return strpos('Tom: My name is Tom', $value, 4); }
T\newInstance(string $className, array $arguments = [__])
T\newInstance(Widget::class); // Is equivalent to: function ($value) { return new Widget($value); }
您还可以使用 __
作为占位符提供一个参数列表,以便在您希望插入值的位置插入。
use const TomPHP\Transform\__; T\newInstance(Widget, ['first', __, 'last']); // Is equivalent to: function ($value) { return new Widget('first', $value, 'last'); }
T\valueOrDefault(mixed $default, callable $predicate = null)
T\valueOrDefault('default') // Is equivalent to: function ($value) { return $value ?: 'default'; }
也可以提供一个谓词函数
T\valueOrDefault('negative number', function ($value) { return $value >= 0; }) // Is equivalent to: function ($value) { return $value >= 0 ? $value : 'negative number'; }