You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP链式回调函数代码解析:为何输出顺序为C→B→A→主内容?

PHP链式回调执行逻辑解析:为何输出顺序是C、B、A、Main Content?

这段PHP代码通过闭包嵌套形成了链式回调,输出顺序看似和数组定义顺序相反,核心原因是循环中闭包的嵌套绑定逻辑,下面一步步拆解:

初始状态

首先定义了三个回调函数的数组$functions,顺序是输出A、B、C的函数;同时初始化$a为一个输出Main Content的函数。

循环中的闭包嵌套过程

循环遍历$functions数组,每次都会把$a重新赋值为一个箭头函数,这个箭头函数的作用是调用当前遍历到的$function,并把当时的$a作为参数传入:

  • 第一次循环(处理输出A的函数):此时$a被替换成一个匿名函数,调用它会先执行输出A的函数,再调用最初的$a(输出Main Content)。
  • 第二次循环(处理输出B的函数):此时$a被替换成新的匿名函数,调用它会先执行输出B的函数,再调用上一轮得到的$a(也就是A+Main的调用链)。
  • 第三次循环(处理输出C的函数):此时$a被替换成最终的匿名函数,调用它会先执行输出C的函数,再调用上一轮得到的$a(也就是B+A+Main的调用链)。

最终调用的执行流程

当执行$a()时,触发的是第三次循环生成的匿名函数:

  1. 先执行输出C的函数,打印C;
  2. 然后调用传入的$a(第二次循环的结果),触发输出B的函数,打印B;
  3. 接着调用传入的$a(第一次循环的结果),触发输出A的函数,打印A;
  4. 最后调用最初的$a,打印Main Content。

所以最终输出顺序是C→B→A→Main Content。

<?php

$functions = [
    
    function($next) {
        
        echo 'A' .PHP_EOL;
        $next();
    },
    
    function($next) {
        
        echo 'B' .PHP_EOL;
        $next();
    },
    
    function($next) {
        
        echo 'C' .PHP_EOL;
        $next();
    }
    
];
    
$a = function() {
    
    echo 'Main Content' .PHP_EOL;
     
};

foreach($functions as $function) {
    
    $a = fn() => $function($a);
    
}

$a();

输出:

C
B
A
Main Content

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:03:19