注意:本文內容可能已經過時,優化的實現請參考 php 基於 psr-15 的中介軟體和請求處理
本文採用層層遞進的方式描述了中介軟體的實現。
在很多計算機程式語言中,函式可以作為引數傳遞到另外乙個函式中。php 的例子如下
$fun
=function()
;function
main
($fun
)main
($fun);
// 執行結果:
// this is a fun
假設在執行主函式的時候,在主函式前後都需要執行一段**,這時我們可以不直接呼叫主函式,而是使用另外的函式來裝飾主函式:
=function
($fun);
$main
=function()
;// 帶有裝飾器的主函式
$next
=function()
use(
,$main);
$next()
;// 執行結果:
// before main
// main
// after main
假設有多個裝飾器函式,就需要一層一層往裡邊傳遞:
// 裝飾器 a
=function
($next);
// 裝飾器 b
=function
($next);
$main
=function()
;$next
=$main
;$next
=function()
use(
,$next);
$next
=function()
use(
,$next);
$next()
;// 執行結果:
// before b
// before a
// main
// after a
// after b
再前進一步,將層層傳遞的部分寫成乙個 foreach 迴圈。這樣,如果有10個裝飾器就能節約很多**:
// 裝飾器 a
=function
($next);
// 裝飾器 b
=function
($next);
$main
=function()
;$next
=$main;=
[,];
foreach(as
);}$next()
;// 執行結果:
// before b
// before a
// main
// after a
// after b
class
request
class
response
inte***ce
middlewareinte***ce
class
middlewarea
implements
middlewareinte***ce
}class
middlewareb
implements
middlewareinte***ce
}function
get_global_middleware()
class
;foreach
($global_middle_ware
as$middleware);
}$response
=$next()
;return
$response;}
public
functiondo(
$request)}
=new()
;$request
=new
request()
;$response=-
>
run(
$request);
var_dump
($request);
var_dump
($response);
// 執行結果
// object(request)#2 (1)
// object(response)#8 (1)
中介軟體 訊息中介軟體學習總結
冪等 在程式設計中.乙個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式 不會影響系統狀態,也不用擔心重複執行會對系統造成改變。例如,getusername 和settrue 函式就是乙個冪等函式....
Redis實現中介軟體(訂閱)
什麼是訊息中介軟體 發布訂閱 點對點 訊息中介軟體本身是非同步的通訊 案例 使用redis實現發布訂閱功能 redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂...
koa中介軟體實現分析
use strict var middleware 向資料庫請求資料 var getdatapromise new promise function resolve,reject 1500 session中介軟體 param next function session next middleware...