使用高阶函数和柯里化来创建灵活的函数组合和链式调用
<?php
// 高阶函数与柯里化的结合应用
// 高阶函数:接受函数作为参数或者返回一个函数
// 柯里化:将多参数函数转换为一系列单参数函数
// 柯里化函数:将一个多参数函数转换为一个接受一个参数并返回另一个函数的函数
function curry($fn) {
$reflection = new ReflectionFunction($fn);
$numArgs = $reflection->getNumberOfRequiredParameters();
return function (...$args) use ($fn, $numArgs) {
if (count($args) >= $numArgs) {
return $fn(...$args);
} else {
return curry(function (...$nextArgs) use ($fn, $args) {
return $fn(...array_merge($args, $nextArgs));
});
}
};
}
// 高阶函数:组合两个函数
function compose($fn1, $fn2) {
return function ($x) use ($fn1, $fn2) {
return $fn1($fn2($x));
};
}
// 示例函数
function add($a, $b) {
return $a + $b;
}
function multiply($a, $b) {
return $a * $b;
}
// 柯里化的加法函数
$curriedAdd = curry('add');
// 柯里化的乘法函数
$curriedMultiply = curry('multiply');
// 组合函数
$composedFunction = compose($curriedAdd(2), $curriedMultiply(3));
// 测试组合函数
$result = $composedFunction(4); // (4 * 3) + 2
echo "<h1>高阶函数与柯里化的结合应用</h1>";
echo "<p>结果:$result</p>"; // 应输出 14
?>