PHP 链接回调函数

问题描述 投票:0回答:1

我遇到过这段代码,但我无法理解它的逻辑。有人能解释一下为什么输出是这样的吗?

<?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 乙 A 主要内容

php anonymous-function
1个回答
0
投票

这是一种反向递归,代码片段设置一个初始回调函数

line 18
,然后循环
$functions
数组,在循环中用新函数覆盖旧变量
$a
。最后,最后一个函数(带有
echo 'C' .PHP_EOL;
的函数)被调用,导致对
$next()
回调
line 14
的初始调用,它 - 从 foreach 循环 - 指向
b
函数,该函数正在被调用,导致调用
$next()
回调
line 10
等等。直到到达初始函数声明。

© www.soinside.com 2019 - 2024. All rights reserved.