<?php
class BuyPiao {
public static function handle($next) {
echo '买飞机票'.PHP_EOL;
$next();
}
}
class CallBus {
public static function handle($next) {
echo '叫的士'.PHP_EOL;
$next();
}
}
function say ($stack, $pipe){
var_dump($stack, $pipe);
return function () use ($stack, $pipe){
return $pipe::handle($stack);
};
};
$first = function() {
echo '到达新加坡'.PHP_EOL;
};
$arr = ['CallBus', 'BuyPiao'];
$go = array_reduce($arr, 'say', $first);
$go();
print_r($go);
/*
1.
$stack = function() {到达新加坡}
$pipe = CallBus 叫的士
function() use (到达新加坡, 叫的士) {
}
2.
$stack = function() use (到达新加坡, 叫的士) {
};
$pipe = BuyPiao; 买票
$go = function() { function()use( function() use {function(){echo到达新加坡},叫的士} , 买飞机票BuyPiao) }
3. $go() 运行:
买飞机票BuyPiao::handle--> 执行$next() => 闭包 function() use { function(){echo到达新加坡}, 叫的士CallBus}
叫的士CallBus::handle --> 执行$next() => 闭包 function(){echo到达新加坡}
新加坡
*/