PHP功能风格

时间:2011-03-31 18:45:38

标签: php functional-programming

我知道PHP 5.3引入的功能就像lambda表达式一样,但我坚持使用以前的版本(5.2)。

是否有任何库为PHP添加功能? PHP数组有一些map / reduce / filter函数,但我很想知道是否还有更多。

另外,我知道PHPLinq模仿.NET的linq,但我还没试过。

由于

3 个答案:

答案 0 :(得分:3)

根据PHP文档,PHP 4.0.1和PHP 5具有以下创建lambda样式函数的方法:

http://php.net/manual/en/function.create-function.php

答案 1 :(得分:1)

Non-stardard PHP library (NSPL)使得在PHP中编写功能代码变得更加容易。查看以下使用NSPL编写的代码:

// get user ids
$userIds = map(propertyGetter('id'), $users);

// or sort them by age
$sortedByAge = sorted($users, methodCaller('getAge'));

// or check if they all are online
$online = all($users, methodCaller('isOnline'));

// or define new function as composition of the existing ones
$flatMap = compose(rpartial(flatten, 1), map);

在纯PHP中,它看起来像这样:

// get user ids
$userIds = array_map(function($user) { return $user->id; }, $users);

// sort them by age, note that the following code modifies the original users array
usort($users, function($user1, $user2) {
    return $user1->getAge() - $user2->getAge();
});

// check if they all are online
$online = true;
foreach ($users as $user) {
    if (!$user->isOnline()) {
        $online = false;
        break;
    }
}

// define new function as composition of the existing ones
$flatMap = function($function, $list) {
    // note the inconsistency in array_map and array_reduce parameters
    return array_reduce(array_map($function, $list), 'array_merge', []);
};

答案 2 :(得分:0)

如果人们仍然对这样的库感兴趣,请查看Saber函数式PHP库。