十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了Thinkphp中Hook行為怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
為杭州等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及杭州網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站設計、成都網(wǎng)站建設、外貿(mào)網(wǎng)站建設、杭州網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
欄目給大家介紹一個Thinkphp Hook行為的使用案例,希望對需要的朋友有所幫助!
thinkphp Hook行為的使用案例
行為,官方是如下介紹: 行為(Behavior)是ThinkPHP擴展機制中比較關(guān)鍵的一項擴展,行為既可以獨立調(diào)用,也可以綁定到某個標簽中進行偵聽,在官方提出的CBD模式中行為也占了主要的地位,可見行為在ThinkPHP框架中意義非凡。
這里指的行為是一個比較抽象的概念,你可以把行為想象成在應用執(zhí)行過程中的一個動作或者處理。
在框架的執(zhí)行流程中,例如路由檢測是一個行為,靜態(tài)緩存是一個行為,用戶權(quán)限檢測也是行為,大到業(yè)務邏輯,小到瀏覽器檢測、多語言檢測等等都可以當做是一個行為,甚至說你希望給你的網(wǎng)站用戶的第一次訪問彈出Hello,world!這些都可以看成是一種行為,行為的存在讓你無需改動框架和應用,而在外圍通過擴展或者配置來改變或者增加一些功能。
而不同的行為之間也具有位置共同性,比如,有些行為的作用位置都是在應用執(zhí)行前,有些行為都是在模板輸出之后,我們把這些行為發(fā)生作用的位置稱之為標簽(位),當應用程序運行到這個標簽的時候,就會被攔截下來,統(tǒng)一執(zhí)行相關(guān)的行為,類似于AOP編程中的“切面”的概念,給某一個切面綁定相關(guān)行為就成了一種類AOP編程的思想。
使用
行為的定義很簡單,只是在某些場景下的應用,可能有點難以理解。 在 laravel 中, 類似于其事件監(jiān)聽器, 當觸發(fā)了某一行為進行自動觸發(fā)相關(guān)的操作方法
舉個例子來說
一個登錄的功能,前期我們只需要校驗密碼即可,按照以往的方法可以這樣做
function checkLogin() {
$this->checkPass();
// -- 新增加的功能
$this->checkMobile();
$this->checkCaptcha();
//... 等等
echo '登錄成功';
}在如上操作中,是不是很麻煩,針對一個登錄行為, 如果后期功能的增加我們需要不斷的去增加功能就必須得去修改控制器代碼
我們進行解耦該怎么做呢?
即將行為,邏輯(鉤子)分離開, 讓代碼更加易于管理
使用如下,我們直接上圖

如上,我們定義了三個不同的即將發(fā)生的行為, 分別為連接網(wǎng)絡 、 關(guān)閉電腦、使用電腦
// Connect.php
namespace app\index\behavior;
class Connect
{
public function run()
{
echo '連接網(wǎng)絡';
}
public function __destruct()
{
echo '
';
}
}
// End.php
namespace app\index\behavior;
class End
{
public function run()
{
echo '關(guān)閉電腦';
echo '
';
}
}
// On.php
namespace app\index\behavior;
class On
{
public function run()
{
echo '開啟電腦';
echo '
';
}
public function qq()
{
echo '打開QQ';
echo '
';
}
public function opBrowser()
{
echo '打開瀏覽器';
echo '
';
}
public function app_end(&$param)
{
$param = '結(jié)束了';
}
}控制器文件 Index.php
namespace app\index\controller;
use think\Hook;
class Index
{
public function __construct()
{
// 開始綁定使用電腦需要進行的操作
Hook::add('app_init',
[
'app\\index\\behavior\\On',
'app\\index\\behavior\\Connect',
]
); // 批量綁定
Hook::add('qq', 'app\\index\\behavior\\On'); // 自定義標簽名
Hook::add('opBrowser', 'app\\index\\behavior\\On'); // 自定義標簽名
// Hook::add('app_end', 'app\\index\\behavior\\End'); // 系統(tǒng)標簽位,無需綁定,自動執(zhí)行
}
public function index()
{
echo '我現(xiàn)在需要使用電腦進行社交';
echo '
';
Hook::listen('app_init'); // 手動初始化
Hook::listen('qq'); // 打開qq
Hook::listen('opBrowser'); // 打開瀏覽器
}
}輸出結(jié)果

1) 解析
首先,我們可以在一個全局中,例如控制器初始化中可以使用 Hook::add 開始進行綁定, 綁定完成后就可以使用 Hook::listen() 執(zhí)行相關(guān)綁定的方法,盡量不要使用Listen音譯去理解這個方法
他實際上不算監(jiān)聽,實際上是運行的意思, 當Listen的時候,會執(zhí)行相關(guān)在前面綁定的方法, 例如 Hook::listen('app_init') 后便會執(zhí)行 'app\\index\\behavior\\On', 'app\\index\\behavior\\Connect'
中的 run 方法
如果 執(zhí)行的行為標簽 app_init 非系統(tǒng)標簽或者在 app\\index\\behavior\\On 中有 app_init 方法,則會就會執(zhí)行其中app_init的方法,而不是執(zhí)行run
2) 自定義標簽
使用自定義標簽必須滿足兩個條件, 1、Hook::add('qq') 對自定義標簽 qq 進行綁定了, 2、對應的行為類中必須存在 qq 這個方法, 否則自動運行 run 方法
3) tags.php 行為綁定
// ..tags.php [ 'app\\index\\behavior\\On', 'app\\index\\behavior\\Connect', ], 'app_end'=> [ 'app\\index\\behavior\\End' ] ];
可以在控制器下目錄下使用 tags.php 進行綁定。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Thinkphp中Hook行為怎么用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!