hook,中文"鉤子",原理是在函數(shù)內(nèi)留下一個空白函數(shù)調(diào)用,為以后代碼的拓展或者更改留下注入空間.
主要的應(yīng)用場景是代碼插件化,更改代碼執(zhí)行順序.
代碼插件化
我們經(jīng)常會遇到各種需求,并且需求不確定,當(dāng)你不確定一個功能函數(shù)是否要拓展,你可以給這個函數(shù)加上一些鉤子,便于以后的拓展,使得代碼如同一個一個的積木,需要就拿來,不需要隨時去除,降低代碼的耦合度
假裝有代碼
代碼我就不貼了,因為我看了一篇文章覺得他寫的比我寫的好.
參考文章:http://www.thinkphp.cn/extend/876.html (侵刪)
更改代碼執(zhí)行順序
通過一個函數(shù)的返回值來改變代碼的流程,有沒有很熟悉?,bingo,我們經(jīng)常使用的配置文件就是非常典型的運用場景.既然大家都很熟悉這種應(yīng)用,話不多說,出道題,大家來舉一反三
如題:
當(dāng)子類需要繼承父類的構(gòu)造函數(shù)時,大多數(shù)人都會想到使用parent::__construct();
但是當(dāng)子類只需要父類構(gòu)造函數(shù)的一部分時呢?
用戶表分為管理員和普通用戶,這時文章子類需要繼承用戶父類的普通用戶,而無需繼承管理員時,我們在實例化普通用戶后中斷構(gòu)造,使其不繼續(xù)往下走.
已知:子類繼承并執(zhí)行父類構(gòu)造時,父類構(gòu)造函數(shù)里如果出現(xiàn)與子類函數(shù)中相同命名的函數(shù),子類的同名函數(shù)將覆蓋父類的同名函數(shù).
依題意得:
用戶父類
class User{
public function __construct(){
//實例化普通用戶
$this->normal_user = new normal_user();
//鉤子函數(shù)
$this->hook();
//實例化管理員用戶
$this->admin_user = new admin_user();
}
public function hook(){
//測試變量
$this->test = 1;
}
}
文章子類
class Article{
public function __construct(){
//執(zhí)行父類構(gòu)造函數(shù)
parent::__construct();
//打印測試變量
var_dump($this->test);
}
public function hook(){
//測試變量
$this->test = 2;
//因為子類只需要實例化普通用戶類,所以中斷父類構(gòu)造的執(zhí)行
return false;
}
}
執(zhí)行結(jié)果:$this->test = 2 , 并且只實例化了normal_user類