chh/funk

PHP 的最小功能编程库

dev-master 2012-10-13 20:29 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:11:08 UTC


README

Funk 是一个为 PHP 设计的最小功能库。

这是一个集合,我在许多项目中都感到需要它

  • 处理柯里化、记忆化和限制函数调用次数(Funk\Func)。
  • 常见的集合操作符,以统一的方式处理数组 迭代器(Funk\Collection)。
  • 紧包裹类型转换操作,同时也处理将对象转换为标量(Funk\Type)。

安装

使用 Composer 安装

php composer.phar require chh/funk:*@dev

然后在您的应用程序中要求 vendor/autoload.php

集合

Funk\Collection 类包装一个 PHP 可迭代值并提供操作它的方法。该集合提供几乎所有操作,使用迭代器,并通过 getIterator(也实现了 IteratorAggregate)公开迭代器。这意味着几乎所有操作都是懒加载评估。

如果您将 PDO 语句包裹在集合中,然后调用 map,您可以看到这个操作。这将在一个特殊的 "MappingIterator" 中包裹 PDO 语句,该迭代器对每个元素应用回调函数,并产生回调的返回值。但是,这仅在 "MappingIterator" 被迭代时发生,在此之前没有任何操作。

示例

<?php

use Funk\Collection,
    Funk\Collection\Operator as op;

echo (new Collection(range(0, 20)))
    ->keep(function($x) { return $x > 5; })
    ->remove(op::gt(7))
    ->map(function($val) { return strval($val); })
    ->join(' ');

在需要 predicate 参数的所有地方,操作都会采用具有不同特性的几个不同值

  • 一个操作符快捷方式,它是 Operator 类的实例。可以通过调用此类的静态方法方便地创建实例。有效的操作符包括:iseqgtgteltlte
  • 值,然后使用 === 与当前迭代器的值进行比较。
  • 回调,返回值被使用。
  • 空值,翻译为 $value == true

__construct($iterable = null)

dup()

extend($value)

append($value)

map($fn)

reduce($callback, $initial = null)

count()

match($pattern)

asArray($assoc = true)

slice($offset, $count = -1)

join($glue = '')

tap($callback, $arguments = array())

all($predicate = null)

some($predicate = null)

compact($callback = null)

attr($attribute)

item($offset)

invoke($method, $arguments = array())

isEmpty($predicate = null)

reverse()

keep($predicate)

remove($predicate)

类型转换

示例

<?php

use Funk\Type;

class Foo
{
    function __toInt()
    {
        return 42;
    }
}

echo Type::intval(new Foo) + 1;
# Output:
# 43