tomphp/transform

一套工具,使 array_map 和 array_filter 更加友好。

v0.2.4 2016-03-27 13:03 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:09:26 UTC


README

Build Status

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'];
}

遍历构建器

如果您想将一系列 callMethodgetPropertygetElement 调用链接在一起,__() 函数提供了一个构建器,以便以更优雅的方式编写。

考虑

$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';
}