laravel - 管道pipe原理

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

 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章