国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從ThinkPHP源碼講解_initialize()與__construct()

Mike617 / 1070人閱讀

摘要:函數的出現是為了我們可以在子類中同時調用父類與子類的構造函數。而在父類經過特別處理后,本身就就可以完成這個功能了,其實我認為的函數本意就是用來在需要同時調用父類與子類構造函數時用的。

最近在學習ThinkPHP框架,看到_initialize()函數,也正好做個小總結

簡單看了谷歌,百度上的教程,感覺噼里啪啦說了好多,全在進行測試,都沒說到點子上~

實驗版本:ThinkPHP 3.2.3,PHP5.6。

_initialize()函數的出現是為了我們可以在子類中同時調用父類與子類的構造函數

想要搞明白最簡單方法的就是打開TP的源碼,最靠譜。

路徑:ThinkPHP3.2.3/ThinkPHP/Library/Think/Controller.class.php.(△Controller是一個抽象類△)

我們可以看到:

在此處Controller這個抽象類重寫了__construct()方法,重點看看三條紅線,這里就是_initialize()的全部,其實壓根沒有特別聲明一個_initialize()方法然后賦予它特別的功能。

可以看出,_initialize()具備構造函數的功能純粹是因為它正好在__construct()里而已(當實例化類時,構造函數__construct運行,如果當前類存在_initialize()方法,順帶執(zhí)行了_initialize())

我們看下在原生PHP中如何完成同時調用子類父類構造函數需求的。

那么在ThinkPHP中呢?(不要在意格式)

原生代碼想要完成需求需要在子類中調用運行parent::__construct()。

而ThinkPHP在父類經過特別處理后,_initialize()本身就就可以完成這個功能了,其實我認為ThinkPHP的_initialize函數本意就是用來在需要同時調用父類與子類構造函數時用的。

總結一下在TP中_initialize()和__construct()使用的注意事項

如果_initialize()和__construct()同時出現的話,那么_initialize()將會無效,因為此時__construct()已經重寫,不再調用_initialize()。

如果想要父子類構造函數同時調用,一定要在父類的__construct()中進行處理:

if(method_exists($this,’_initialize’)){

$this -> _initialize();

}

兩者都不能被子類覆蓋重寫,否則父子類同時調用的功能將會失效

就目前而言(ThinkPHP3.2.3)中,_initialize()是有漏洞的,畢竟還需要我們在手動進行一次處理,這樣的話_initialize()的作用就剩下命名約束了,因為只要愿意的話完全可以將_initialize改成其他命名,相信官方在后期版本會改進這個函數。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21503.html

相關文章

  • ThinkPHP5之 _initialize() 初始化方法詳解

    摘要:延伸如果子類繼承了父類后,重寫了構造方法,注意調用父類的哦,否則是使用不了的,代碼如下其他代碼總結一個簡單的小設計,這里拋磚引玉的分析下,希望對大家有幫助。 前言 _initialize() 這個方法在官方手冊里是這樣說的: 如果你的控制器類繼承了 hinkController類的話,可以定義控制器初始化方法_initialize,在該控制器的方法調用之前首先執(zhí)行。 其實不止5,在之前...

    Jinkey 評論0 收藏0
  • EasySwoole 服務啟動過程以及主體設計流程源碼解析

    摘要:以上是服務啟動過程中的主體設計,其中包括了各種組件的實例化,如對象池等。 EasySwoole 服務啟動過程以及主體設計流程源碼解析 本文主要講解EasySwoole 服務的啟動過程,會通過源碼片段講解主體的設計流程 命令啟動 當我們通過php easyswoole start啟動EasySwoole 服務時,命令真正到達的文件是 easyswoole項目vendoreasyswool...

    huayeluoliuhen 評論0 收藏0
  • thinkphp源碼分析(四)—錯誤及異常處理篇

    摘要:源碼分析錯誤及異常處理機制錯誤及異常處理機制文件是,在框架引導文件的的基礎文件中注冊不知道的可以去看源碼分析二入口篇,通過進行的注冊。異常中止處理將錯誤信息托管至寫入日志通過獲取最后拋出的錯誤,把信息托管至,在通過異常處理函數進行記錄信息。 源碼分析 錯誤及異常處理機制 錯誤及異常處理機制文件是/thinkphp/library/think/Error.php,在框架引導文件的的基礎文...

    xialong 評論0 收藏0
  • thinkphp整合企業(yè)號的坑

    摘要:使用微信企業(yè)號回調的坑最近在做企業(yè)號回調的接口,之前做過幾個企業(yè)號的應用了,每次接入到都報各種各樣的錯誤,算哥倒霉,該踩的不該踩的坑全踩了。 ThinkPHP 使用微信企業(yè)號回調的坑 最近在做企業(yè)號回調的接口,之前做過幾個企業(yè)號的應用了,每次接入到Thinkphp都報各種各樣的錯誤,算哥倒霉,該踩的不該踩的坑全踩了。 這次掉坑里差點就放棄了,開發(fā)過企業(yè)號的都知道,企業(yè)號回調會經過一個...

    wing324 評論0 收藏0
  • _initialize() 區(qū)別 __construct()

    摘要:方法是在任何方法執(zhí)行之前,都要執(zhí)行的,當然也包括構造函數。也就是說如果存在函數,調用對象的任何方法都會導致函數的自動調用而構造函數僅僅在創(chuàng)建對象的時候調用一次,跟其它方法調用沒有關系。默認情況下,子類的構造函數不會自動調用父類的構造函數。 _initialize()方法是在任何方法執(zhí)行之前,都要執(zhí)行的,當然也包括 __construct構造函數。 也就是說如果存在_initializ...

    weij 評論0 收藏0

發(fā)表評論

0條評論

Mike617

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<