摘要:延伸如果子類(lèi)繼承了父類(lèi)后,重寫(xiě)了構(gòu)造方法,注意調(diào)用父類(lèi)的哦,否則是使用不了的,代碼如下其他代碼總結(jié)一個(gè)簡(jiǎn)單的小設(shè)計(jì),這里拋磚引玉的分析下,希望對(duì)大家有幫助。
前言
_initialize() 這個(gè)方法在官方手冊(cè)里是這樣說(shuō)的:
如果你的控制器類(lèi)繼承了 hinkController類(lèi)的話,可以定義控制器初始化方法_initialize,在該控制器的方法調(diào)用之前首先執(zhí)行。
其實(shí)不止5,在之前的版本中也出現(xiàn)過(guò),這里和大家聊一聊它的實(shí)現(xiàn)過(guò)程吧。
示例下面是官方手冊(cè)上給的示例:
namespace appindexcontroller; use thinkController; class Index extends Controller { public function _initialize() { echo "init
"; } public function hello() { return "hello"; } public function data() { return "data"; } }
如果訪問(wèn)
http://localhost/index.php/index/Index/hello
會(huì)輸出
init hello
如果訪問(wèn)
http://localhost/index.php/index/Index/data
會(huì)輸出
init data分析
因?yàn)槭褂帽仨氁^承 hinkController類(lèi),加上這個(gè)又是初始化,所以我們首先就想到了 hinkController類(lèi)中的 __construct(),一起來(lái)看代碼:
/** * 架構(gòu)函數(shù) * @param Request $request Request對(duì)象 * @access public */ public function __construct(Request $request = null) { if (is_null($request)) { $request = Request::instance(); } $this->view = View::instance(Config::get("template"), Config::get("view_replace_str")); $this->request = $request; // 控制器初始化 if (method_exists($this, "_initialize")) { $this->_initialize(); } // 前置操作方法 if ($this->beforeActionList) { foreach ($this->beforeActionList as $method => $options) { is_numeric($method) ? $this->beforeAction($options) : $this->beforeAction($method, $options); } } }
細(xì)心的你一定注意到了,在整個(gè)構(gòu)造函數(shù)中,有一個(gè)控制器初始化的注釋?zhuān)旅娲a就是實(shí)現(xiàn)這個(gè)初始化的關(guān)鍵:
// 控制器初始化 if (method_exists($this, "_initialize")) { $this->_initialize(); }
真相出現(xiàn)了有木有?!
其實(shí)就是當(dāng)子類(lèi)繼承父類(lèi)后,在沒(méi)有重寫(xiě)構(gòu)造函數(shù)的情況下,也自然繼承了父類(lèi)的構(gòu)造函數(shù),相應(yīng)的,進(jìn)行判斷當(dāng)前類(lèi)中是否存在 _initialize 方法,有的話就執(zhí)行,這就是所謂的控制器初始化的原理。
延伸如果子類(lèi)繼承了父類(lèi)后,重寫(xiě)了構(gòu)造方法,注意調(diào)用父類(lèi)的__construct()哦,否則是使用不了的,代碼如下:
public function __construct() { parent::__construct(); ...其他代碼... }總結(jié)
一個(gè)簡(jiǎn)單的小設(shè)計(jì),這里拋磚引玉的分析下,希望對(duì)大家有幫助。
鏈接相關(guān)手冊(cè)頁(yè)面:http://www.kancloud.cn/manual/thinkphp5/118049
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21987.html
摘要:函數(shù)在框架初始化方法中無(wú)效當(dāng)初做權(quán)限控制在判斷是否有權(quán)限如果無(wú)權(quán)限就執(zhí)行跳轉(zhuǎn)跳轉(zhuǎn)的函數(shù)是但是無(wú)論如何都無(wú)法跳轉(zhuǎn)出去當(dāng)時(shí)的版本是手冊(cè)還不太完善后來(lái)得知必須得才可以跳轉(zhuǎn)重定向完整代碼分頁(yè)參數(shù)的問(wèn)題如果是普通分頁(yè)沒(méi)毛病但是分頁(yè)后面有其他參數(shù)比 01:redirect函數(shù)在框架初始化方法中無(wú)效當(dāng)初做權(quán)限控制,在initialize判斷是否有權(quán)限,如果無(wú)權(quán)限就執(zhí)行跳轉(zhuǎn),跳轉(zhuǎn)的函數(shù)是redirec...
摘要:索性讀一下它的源碼。行載入類(lèi)載入類(lèi),這個(gè)類(lèi)比較重要,實(shí)現(xiàn)了自動(dòng)加載。注冊(cè)錯(cuò)誤和異常處理機(jī)制加載慣例配置文件接下來(lái)我們看一下自動(dòng)加載的實(shí)現(xiàn)方法。所以借助此函數(shù)可以達(dá)到自動(dòng)加載。博客鏈接解讀源碼一自動(dòng)加載 聽(tīng)說(shuō) TP5 已經(jīng) RC4 了,曾經(jīng)在 RC3 的時(shí)候用它寫(xiě)過(guò)一個(gè)小東西。官方說(shuō)從 RC4 以后改動(dòng)不是太大。索性讀一下它的源碼。然后順便記錄一下,如有錯(cuò)漏,請(qǐng)路過(guò)大神多多指正! 入口 ...
摘要:數(shù)據(jù)庫(kù)文件已經(jīng)上傳,安裝配置就可以使用簡(jiǎn)稱(chēng)即基于的后臺(tái)管理系統(tǒng)官方文檔地址在線體驗(yàn)地址賬戶(hù)密碼線上倉(cāng)庫(kù)在線地址源代碼下載克隆直接下載本地部署運(yùn)行環(huán)境要求建議配置虛擬域名若不清楚,請(qǐng)自行解決之,方便接下來(lái)開(kāi)展你的開(kāi)發(fā)工作。 喜歡就Star,不只是Fork; 想要分享的動(dòng)機(jī)才是驅(qū)動(dòng)力,而技術(shù)僅僅是一種方法。 數(shù)據(jù)庫(kù)文件已經(jīng)上傳,安裝配置就可以使用 showImg(https://seg...
摘要:數(shù)據(jù)庫(kù)文件已經(jīng)上傳,安裝配置就可以使用簡(jiǎn)稱(chēng)即基于的后臺(tái)管理系統(tǒng)官方文檔地址在線體驗(yàn)地址賬戶(hù)密碼線上倉(cāng)庫(kù)在線地址源代碼下載克隆直接下載本地部署運(yùn)行環(huán)境要求建議配置虛擬域名若不清楚,請(qǐng)自行解決之,方便接下來(lái)開(kāi)展你的開(kāi)發(fā)工作。 喜歡就Star,不只是Fork; 想要分享的動(dòng)機(jī)才是驅(qū)動(dòng)力,而技術(shù)僅僅是一種方法。 數(shù)據(jù)庫(kù)文件已經(jīng)上傳,安裝配置就可以使用 showImg(https://seg...
閱讀 910·2021-09-03 10:42
閱讀 1521·2019-08-30 15:56
閱讀 1457·2019-08-29 17:27
閱讀 881·2019-08-29 15:25
閱讀 3168·2019-08-26 18:27
閱讀 2490·2019-08-26 13:41
閱讀 1898·2019-08-26 10:39
閱讀 1589·2019-08-23 18:36