news 2026/6/25 22:13:43

PHP闭包进阶与函数式组合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP闭包进阶与函数式组合

PHP闭包进阶与函数式组合

PHP从5.3开始支持闭包,从7.4开始支持箭头函数。今天说说闭包的进阶用法和函数式组合。

闭包可以捕获外部变量。按值捕获和按引用捕获不同。

```php
$prefix = "用户: ";
$formatName = function (string $name) use ($prefix): string {
return $prefix . $name;
};
echo $formatName("张三") . "\n";

$counter = 0;
$increment = function () use (&$counter) {
$counter++;
};
$increment();
$increment();
echo $counter . "\n";
?>

函数工厂返回闭包。

```php
function createDiscount(float $rate): Closure
{
return fn(float $price) => round($price * (1 - $rate), 2);
}

$vipDiscount = createDiscount(0.2);
$seasonalDiscount = createDiscount(0.15);
echo "VIP价: " . $vipDiscount(299) . "\n";
echo "季末价: " . $seasonalDiscount(299) . "\n";
?>

函数组合可以把多个小函数组合成复杂的处理流程。

```php
function pipe(callable ...$fns): Closure
{
return function ($value) use ($fns) {
foreach ($fns as $fn) $value = $fn($value);
return $value;
};
}

$trim = fn(string $s): string => trim($s);
$lower = fn(string $s): string => strtolower($s);
$slug = fn(string $s): string => preg_replace('/\s+/', '-', $s);
$shorten = fn(string $s): string => substr($s, 0, 50);

$makeSlug = pipe($trim, $lower, $slug, $shorten);
echo $makeSlug(" Hello World! ") . "\n";
?>

柯里化把多参数函数转换成单参数函数链。

```php
function curry(callable $fn, ...$args): Closure
{
return function (...$newArgs) use ($fn, $args) {
$all = array_merge($args, $newArgs);
$ref = new ReflectionFunction($fn);
if (count($all) >= $ref->getNumberOfRequiredParameters()) {
return $fn(...$all);
}
return curry($fn, ...$all);
};
}

function add(int $a, int $b, int $c): int
{
return $a + $b + $c;
}

$curried = curry('add');
$add5 = $curried(5);
echo $add5(10, 20) . "\n";
?>
>

闭包是PHP函数式编程的基础。理解闭包的工作原理后,写出来的代码会更灵活。闭包用在回调、事件处理、路由处理、中间件中都很常见。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 22:10:00

数据科学求职三份简历策略:精准匹配岗位语义分裂

1. 为什么“永远准备三份简历”是数据科学求职者最被低估的硬核策略在数据科学求职圈里,我见过太多人把90%精力花在刷LeetCode、调参炼丹、复现顶会论文上,却在简历这道门槛前栽得莫名其妙——明明项目经历扎实,GitHub星标过百,Ka…

作者头像 李华
网站建设 2026/6/25 22:12:24

基于MC68HC16Z1的实时音频频谱显示系统:DSP算法与硬件协同设计

1. 项目概述与核心思路最近在整理一个老项目的资料,翻出来一个基于MC68HC16Z1微控制器的经典设计:一个实时的音频频谱显示系统。这个项目的核心,是把模拟的音频信号,通过微控制器内部的ADC采样进来,然后用数字信号处理…

作者头像 李华
网站建设 2026/6/8 13:44:15

NT5CC128M16JR-EKI现货与DDR3存储器件小批量采购说明

NT5CC128M16JR-EKI 是客户常询的 NANYA DDR3 存储器件方向型号之一,常见于工业控制、通信设备、嵌入式终端、仪器仪表及部分电子制造项目中。对于这类型号,采购人员通常会关注品牌、容量、封装、批次、交期和项目供货稳定性。深智微科技长期服务汽车电子…

作者头像 李华
网站建设 2026/6/11 14:36:38

i.MX 8启动时间精确测量:GPIO脉冲标记法实战指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是工业控制、汽车电子和高端消费电子领域,系统启动时间是一个至关重要的性能指标。想象一下,一台智能工厂的机械臂或者一台高端医疗设备,从按下电源键到完全就绪,每节省一秒…

作者头像 李华