apantle / fun-php
功能式编程,增强 OOP PHP 开发者体验
Requires (Dev)
- apantle/hashmapper: ^1.2
- phpunit/phpunit: ~6.5
This package is auto-updated.
Last update: 2024-09-03 03:16:28 UTC
README
功能式编程,增强 OOP PHP 开发者体验
这里有一些支持的函数及其最小示例,更多示例可以在包的测试中找到
compose
应用一系列函数,首先应用右侧的函数,然后应用返回值到左侧的函数
示例
$stringSquaredRoot = compose('strval', 'sqrt'); var_dump('4' === $stringSquaredRoot(16)); // bool(true)
pipe
返回一个接收任意数量可调用函数的函数,第一个函数接收任意数量的参数,然后它将返回值传递到管道中的下一个函数,依此类推。下一个函数必须是单参数的(只接受一个参数)。
带有简化功能控制器的示例
$getFoldersController = pipe( 'validateHasUser', 'validatePermissionOfUser', 'getRootFolders' ); function validateHasUser($request = null) { if (!array_key_exists($request, 'user')) { throw new \LogicException('User parameter not received'); } return $request; } function validatePermissionOfUser($request) { if (intval($request['user']) !== 1) { throw new \DomainException('Only root user has permissions on this route'); } return $request; } function getRootFolders($request) { return [ 'folder-' . $request['user'] ]; } // $user key absent of request: $getFoldersController(['path' => 'whatever']); // throws LogicException // $user key present, non root user $getFoldersController(['user' => 20]); // throws DomainException // $user is root $getFoldersController(['user' => 1]); // returns [ 'folder-1' ];
curryToUnary
允许部分应用任何可调用函数,返回一个单参数函数。在结合 pipe
编写无参数风格算法时非常有用。
传入要绑定的参数列表,常量 Apantle\FunPHP\_
可以交换期望的参数位置。例如,您可以使用 array_map 和要映射的数组构建一个 Mappable 集合,并每次传递不同的映射器。
示例
$simpleArrayReverse = curryToUnary('array_reverse'); var_dump([4,3,2,1] === $simpleArrayReverse([1,2,3,4]); // bool(true) // custom position of argument to receive: $map = curryToUnary('array_map', \Apantle\FunPHP\_, [1, 2, 3, 4]); $result = $map(function ($num) { return $num * 10; }); var_dump([10, 20, 30, 40] === $result); // bool(true)
constant
返回一个总是返回传入值的函数,对于占位符或与常量值的组合非常有用,但可以避免硬编码值
$request = [ 'store_id' => filter_input( INPUT_POST, 'store', VALIDATE_FILTER_INT ) ]; $scope = constant($request['store_id']); $scope() // always return the value received in $_POST['store']
identity
用于函子测试,总是返回传入的值
head
获取数组中的第一个元素
var_dump(1 === head[1,2,3,4]); // bool(true)
unfold
返回一个函数,它接受单个值,对其应用一个变换数组,并返回一个具有与规格数组相同键的关联数组,其值由这些函数映射。
用于将单个输入传递到多个服务,然后收集输出的单个 hashmap。是 apantle/hashmapper 的完美对偶。
示例
$input = 4; var_dump(json_encode(unfold([ 'sqrt' => 'sqrt', 'factorial' => 'gmp_fact' ])($input))); // string(25) "{"sqrt":2,"factorial":24}"
如果函数是单参数的,则只传递输入值。
为了更容易地组合复杂的算法,映射器可以接收第二个参数,apantle/hashmapper 会自动将此参数传递给每个映射器,即整个要映射的关联数组。
除了变换规格之外,它还接受一个可选参数,允许您将值通过映射器传递,建议该参数是一个对象,以便通过引用传递。
有关更多示例,请参阅测试源代码 https://github.com/apantle/fun-php/blob/566bfe539bb193028c5bad4c6687a6f3a1b1e82c/tests/FunctionsTest.php#L50-L70