sysvyz/hurl

PHP7 语言包装器

1.0.0-alpha.0.4 2016-07-17 22:33 UTC

This package is not auto-updated.

Last update: 2024-09-26 01:23:04 UTC


README

Hurl 是一个数据转换框架,旨在组合复杂的转换。

安装

您需要 composer require sysvyz/hurl

使用方法

Hurl 被设计成将算法作为数据结构构建。每个算法都由一棵树表示。树通过其根节点表示。为了重用,树应该是无状态的(且不可变的)。Node 表示数据转换。

创建节点

节点基本上是对 functionClosure 的包装。就像函数一样,节点有输入(参数)和输出。

$fromHex = Node::call(function ($data) {
    return hexdec($data);
});
var_dump($fromHex('a'));
        
//int(10)

内置转换

节点是转换规则。有几个内置的 PHP 函数被包装成节点。

$explode = Node::explode('.');
var_dump($explode('a.b'));
//array(2) {
//  [0]=>
//  string(1) "a"
//  [1]=>
//  string(1) "b"
//}

链式转换

节点可以被链接起来以执行多个连续的转换。

$chain = $explode->implode('-');
var_dump($chain('a.b'));
//string(3) "a-b"

映射

最常用的转换之一是 array_map。节点提供了一个方便的方式来执行这些操作。由于 array_mapcallback 函数实际上就是一个转换,所以显然可以使用节点作为回调。

$map = $explode->map($fromHex)->implode('.');
var_dump($map('a.b'));
//string(5) "10.11"

排序

$sort = Node::ARRAY()->sort(function ($a,$b){
    return $a-$b;
});
var_dump($sort([2,5,3,4,1]));
//array(5) {
//  [0]=>
//  int(1)
//  [1]=>
//  int(2)
//  [2]=>
//  int(3)
//  [3]=>
//  int(4)
//  [4]=>
//  int(5)
//}