溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

tp5框架中的hook機(jī)制是什么

發(fā)布時(shí)間:2021-05-10 09:56:45 來(lái)源:億速云 閱讀:145 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹tp5框架中的hook機(jī)制是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

1. 官方解釋

行為(Behavior)是ThinkPHP擴(kuò)展機(jī)制中比較關(guān)鍵的一項(xiàng)擴(kuò)展,行為既可以獨(dú)立調(diào)用,也可以綁定到某個(gè)標(biāo)簽中進(jìn)行偵聽(tīng),在官方提出的CBD模式中行為也占了主要的地位,可見(jiàn)行為在ThinkPHP框架中意義非凡。

2. TP5自帶鉤子(TP框架中已經(jīng)埋好標(biāo)簽,我們只要配置實(shí)現(xiàn)相應(yīng)的函數(shù)就可以用了)

  1. app_init 應(yīng)用初始化標(biāo)簽位,在think\App.php的initCommon函數(shù)中Hook::listen(‘a(chǎn)pp_init’);沒(méi)有接收參數(shù)。

  2. app_begin應(yīng)用開(kāi)始標(biāo)簽位,在think\App.php的run函數(shù)中,在加載路由和請(qǐng)求信息后執(zhí)行。會(huì)接收一個(gè)參數(shù),存儲(chǔ)的是本次請(qǐng)求的調(diào)度信息。

  3. module_init 模塊初始化標(biāo)簽位,在think\App.php的module函數(shù)中,在加載請(qǐng)求控制器之前執(zhí)行,接收一個(gè)參數(shù),存儲(chǔ)請(qǐng)求信息。

  4. action_init 控制器開(kāi)始標(biāo)簽位,在think\App.php的module函數(shù)中,在加載完控制器后,使用反射請(qǐng)求控制器之前執(zhí)行。接收一個(gè)參數(shù),是一個(gè)數(shù)組,第一個(gè)元素是請(qǐng)求控制器實(shí)例對(duì)象,第二個(gè)函數(shù)時(shí)要執(zhí)行的控制器函數(shù)名。

  5. view_fileter 視圖輸出過(guò)濾標(biāo)簽位,在think\View.php的fetch函數(shù)中,接收一個(gè)參數(shù),視圖字符串。

  6. app_end 應(yīng)用結(jié)束標(biāo)簽為,在think\App.php中run函數(shù)中,Hook::listen(‘a(chǎn)pp_end’);

  7. log_write 日志write方法標(biāo)簽位,在調(diào)用Log::wirte記錄日志之前執(zhí)行。接收一個(gè)參數(shù),要寫入的日志信息。

  8. response_end 響應(yīng)結(jié)束標(biāo)簽為。在think\Response.php的send函數(shù)中,在響應(yīng)客戶端請(qǐng)求之后執(zhí)行。

3. 鉤子函數(shù)的注冊(cè)和監(jiān)聽(tīng)都依賴于think\Hook.php

4. 系統(tǒng)只帶的鉤子函數(shù),我們可以在application\tags.php中注冊(cè),也可以使用Hook::add()來(lái)添加。

> 1. 官方文檔數(shù)tags.php會(huì)自動(dòng)加載,但是經(jīng)測(cè)試我下載的tp5不會(huì)自動(dòng)加載tags.php文件,所以就手動(dòng)在think\start.php文件的App::run()->send();函數(shù)之前寫了一行代碼用于,注冊(cè)tags文件中的鉤子實(shí)現(xiàn)。代碼為
"php
    // 加載Hook
    Hook::import(require APP_PATH . '/tags.php');
"
> 2. 也可以使用Hook::add和Hook::listen來(lái)添加自己的鉤子函數(shù)。Hook::listen()相當(dāng)于是標(biāo)簽位,Hook::add()則相當(dāng)于是對(duì)標(biāo)簽位相應(yīng)的實(shí)現(xiàn)。所以要確保Hook::add()在Hoo::listen之前執(zhí)行,不然就沒(méi)什么用處了。

5. 鉤子函數(shù)的綁定。

鉤子函數(shù)既可以單獨(dú)綁定一個(gè)類,也可以綁定類中的一個(gè)方法,或者直接綁定一個(gè)匿名函數(shù)。當(dāng)綁定到一個(gè)類時(shí),如果類中有run函數(shù),那就直接執(zhí)行run函數(shù),如果沒(méi)有run函數(shù),而有一個(gè)與鉤子名一樣的函數(shù)則會(huì)執(zhí)行該函數(shù)。(注意:鉤子函數(shù)是駝峰式命名,并且鉤子函數(shù)名的優(yōu)先級(jí)大于run函數(shù)的優(yōu)先級(jí))

以上是“tp5框架中的hook機(jī)制是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

tp5
AI