<?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到達新加坡}
新加坡
*/