我遇到过这段代码,但我无法理解它的逻辑。有人能解释一下为什么输出是这样的吗?
<?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 主要内容
这是一种反向递归,代码片段设置一个初始回调函数
line 18
,然后循环$functions
数组,在循环中用新函数覆盖旧变量$a
。最后,最后一个函数(带有 echo 'C' .PHP_EOL;
的函数)被调用,导致对 $next()
回调 line 14
的初始调用,它 - 从 foreach 循环 - 指向 b
函数,该函数正在被调用,导致调用 $next()
回调 line 10
等等。直到到达初始函数声明。