轉(zhuǎn)載自 http://www.thinkphp.cn/topic/21323.html
ThinkPHP3.2.2 行為(Behavior)擴(kuò)展以及插件(Plug or Hook)詳解(含實(shí)例)
概述:
行為(Behavior)是ThinkPHP擴(kuò)展機(jī)制中比較關(guān)鍵的一項(xiàng)擴(kuò)展怪嫌,行為既可以獨(dú)立調(diào)用匆骗,也可以綁定到某個(gè)標(biāo)簽中進(jìn)行偵聽泛领,官方提出的CBD模式中行為也占了主要的地位,可見行為在ThinkPHP框架中意義非凡算墨。
這里指的行為是一個(gè)比較抽象的概念,你可以想象成在應(yīng)用執(zhí)行過程中的一個(gè)動(dòng)作或者處理蘸鲸,在框架的執(zhí)行流程中噪伊,各個(gè)位置都可以有行為產(chǎn)生,例如路由檢測是一個(gè)行為磁携,靜態(tài)緩存是一個(gè)行為褒侧,用戶權(quán)限檢測也是行為,大到業(yè)務(wù)邏輯谊迄,小到瀏覽器檢測闷供、多語言檢測等等都可以當(dāng)做是一個(gè)行為,甚至說你希望給你的網(wǎng)站用戶的第一次訪問彈出Hello统诺,world歪脏!這些都可以看成是一種行為,行為的存在讓你無需改動(dòng)框架和應(yīng)用粮呢,而在外圍通過擴(kuò)展或者配置來改變或者增加一些功能唾糯。
而不同的行為之間也具有位置共同性,比如鬼贱,有些行為的作用位置都是在應(yīng)用執(zhí)行前移怯,有些行為都是在模板輸出之后,我們把這些行為發(fā)生作用的位置稱之為標(biāo)簽(位)这难,當(dāng)應(yīng)用程序運(yùn)行到這個(gè)標(biāo)簽的時(shí)候舟误,就會(huì)被攔截下來,統(tǒng)一執(zhí)行相關(guān)的行為姻乓,類似于AOP編程中的“切面”的概念嵌溢,給某一個(gè)切面綁定相關(guān)行為就成了一種類AOP編程的思想眯牧。(摘抄 :http://www.thinkphp.cn/info/249.html),對咯,如果你不懂”切面“這個(gè)概念赖草,最好是先度娘下学少。
一、實(shí)例:(以下代碼演示均基于 ThinkPHP3.2.2,未修改任何文件和目錄結(jié)構(gòu))秧骑,做一個(gè)ad(廣告)的鉤子
1.如果我們想在模板上調(diào)用例如{:tag('example',array('name'=>'name','value'=>'value'))} 這樣的方法版确,首先我們到 ThinkPHP->Common->functions.php,你會(huì)搜到 tag 這個(gè)方法,哈哈乎折,我有強(qiáng)迫癥绒疗,復(fù)制下 tag 方法,修改為
function hook($hook,$params=array()){
\Think\Hook::listen($hook,$params); //監(jiān)聽一個(gè)鉤子
}
2.在控制器中 Application->Home->Controller->IndexController.class.php 添加如下代碼:
namespace Home\Controller;
use Think\Controller;
use Think\Hook;
class IndexController extends Controller {
public function index(){
Hook::add('ad','Behavior\\adBehavior'); //我種下一顆子骂澄,終于長出了果實(shí)(摘抄《小蘋果》歌詞)
$this->display();
}
}
3.來新建一個(gè)行為取名叫ad(廣告)吓蘑,ThinkPHP->Library->Behavior->adBehavior.class.php
namespace Behavior;
class adBehavior{
function run($arg){
echo '我是一條'.$arg['name'].'廣告,'.$arg['value'].'代言'; //在此介紹下,run必須的 坟冲,細(xì)心的會(huì)在Think核心找到Behavior.class.php里面有這樣一句操蛋的話 abstract public function run(&$params); 你懂的
}
}
4.在模板中使用 Application->Home->View->Index->index.html 添加如下代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ThinkPHP3.2.2 行為(Behavior)擴(kuò)展以及插件(Plug or Hook)詳解(含實(shí)例)
</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="Hook使用方法" />
</head>
<body>
<h1>How to used?</h1>
{:hook('ad', array('name'=>'AV','value'=>'*老師'))}
</body>
</html>
感覺這個(gè)用的不爽磨镶,下一篇還是找個(gè)更詳細(xì)的。