ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 1990
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎_w泰k克_lnz新hkshu闻hr_q网igp版权所有,请勿未授权转载!!!
虎tgmav泰rgvak克hkz_新wkd闻igytx网r版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎bs泰uvdl克dz新dbza闻qbgwf网ccat版权所有,请勿未授权转载!!!
虎gj泰u_n克u新uzxfd闻y网mwmcw版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎zow泰umrm克x新ol闻vbtr网y版权所有,请勿未授权转载!!!
虎vsp泰fx_w克ked新jjtou闻yd网ryo版权所有,请勿未授权转载!!!
a.php
虎kg泰pxz克crx新bsfj闻vmzu网amtj版权所有,请勿未授权转载!!!
class a{
虎mf泰wqwx克cvu新_g闻xbwq网egx版权所有,请勿未授权转载!!!
function __construct(){
虎qvvej泰vvixs克xen_s新jm闻b网su_版权所有,请勿未授权转载!!!
echo 'a';
虎rmnf泰nnk克q新v闻mn网ktpz版权所有,请勿未授权转载!!!
}
虎miqc泰esj克msh新cf闻ha网fu版权所有,请勿未授权转载!!!
}
虎hjxm泰obr克j新dvp闻yybk_网zqjbe版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎bvcg泰cixsz克yom新rbp闻zb网lnzni版权所有,请勿未授权转载!!!
include 'a.php';
虎rwhsb泰wyh克bl新xcdf闻myxo网gilo版权所有,请勿未授权转载!!!
class b extends a{
虎e泰sb克g新zi闻hc_网i版权所有,请勿未授权转载!!!
function __construct(){
虎d泰wpb克fm新npe闻agpja网_版权所有,请勿未授权转载!!!
echo 'b';
虎wkqmg泰lpykf克wo新aesd闻cs网lyzw版权所有,请勿未授权转载!!!
}
虎s_泰_w克ch新fdd闻izsmw网s版权所有,请勿未授权转载!!!
}
虎jsudl泰eajr克sk新_cbhm闻qb网gdk版权所有,请勿未授权转载!!!
虎jtthb泰sep克_wwq新jb_闻ai网ob版权所有,请勿未授权转载!!!
$test=new b();
虎lmloq泰rgji克ihqyo新lpoz闻omhia网oyhd版权所有,请勿未授权转载!!!
运行结果:
虎uwf泰gxeg克t新dsa闻rmvz网qjpw版权所有,请勿未授权转载!!!
b
虎x泰_pyp克vgl新usnga闻eoulg网aa版权所有,请勿未授权转载!!!
虎yv_oy泰faxdc克y新jle闻x网el版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎xhyfx泰cjqo克mt_h新seh闻mvli网vy版权所有,请勿未授权转载!!!
虎zvkqw泰vhbsg克j新vu闻gr网jazyt版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎olah泰oeq克hrkeu新hjeb闻fmqq网_版权所有,请勿未授权转载!!!
include 'a.php';
虎m泰gjh克kxb新jh闻mdxoj网e版权所有,请勿未授权转载!!!
class b extends a{
虎z泰jz克ldg新m闻mbcz网ahp版权所有,请勿未授权转载!!!
function __construct(){
虎rl泰a克tl新a闻bp网mjdh版权所有,请勿未授权转载!!!
parent::__construct();
虎hbiyh泰r克kvmq新a闻f网h版权所有,请勿未授权转载!!!
echo 'b';
虎gu泰q克xqxo新a闻vb网w版权所有,请勿未授权转载!!!
}
虎l泰trqcx克l新jlvij闻ssbff网la版权所有,请勿未授权转载!!!
}
虎hwhmq泰jkpzx克pu新f闻mnwky网fp版权所有,请勿未授权转载!!!
虎lebeo泰egz克lj_新v闻jgn网l版权所有,请勿未授权转载!!!
$test=new b();
虎ngd泰e克bxvm新w闻s网gajcw版权所有,请勿未授权转载!!!
那么输出结果是:
虎f泰_克pkgj新lunkc闻znktq网wf版权所有,请勿未授权转载!!!
ab
虎mknio泰_qcf克pfab新kqv闻vodsw网pp版权所有,请勿未授权转载!!!
虎cum泰ak克qa新_闻yna网x版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎tp泰oml克ens新nkfpf闻nj网jt版权所有,请勿未授权转载!!!
虎ckw泰wl克n新vcv闻xnjl网pjdq版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎s泰ls克ubbii新u闻_b网i_版权所有,请勿未授权转载!!!
虎ba泰u克y新isrd闻md网rntxt版权所有,请勿未授权转载!!!
BaseAction.class.php
虎xin泰zafg克y新k闻jl网uql_z版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎qndtw泰qer克dvl新fhycw闻hm网wyjch版权所有,请勿未授权转载!!!
public function _initialize(){
虎l泰smv克vlyjw新awm闻kk网xlcwv版权所有,请勿未授权转载!!!
echo 'baseAction';
虎rete泰vq克agjo新kc闻fvlpg网cf版权所有,请勿未授权转载!!!
}
虎dk泰t克ji新g闻pfm网ss版权所有,请勿未授权转载!!!
}
虎yv泰z克oy新w闻ttzo网lkl版权所有,请勿未授权转载!!!
虎q泰jqwl克jif新eujp闻ufx网s版权所有,请勿未授权转载!!!
IndexAction.class.php
虎t_miu泰yl克nen新hq闻ai网br版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎je泰vj克ql新bk闻tuj网tasn版权所有,请勿未授权转载!!!
public function (){
虎g泰stunz克evqi新chu闻e网wwnd版权所有,请勿未授权转载!!!
echo 'indexAction';
虎zxjb泰v克vwx新l闻nxjym网da_d版权所有,请勿未授权转载!!!
}
虎mnie泰drw克sj新stvt闻p网cabl版权所有,请勿未授权转载!!!
}
虎akuvt泰wqvg克temrc新_fvbr闻msgs网v版权所有,请勿未授权转载!!!
虎oxt泰fduzf克cvuqk新qilm闻ew网zbdvw版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎nzffj泰imigl克h_pwc新woada闻_li网joi版权所有,请勿未授权转载!!!
baseActionindexAcition
虎nwrv泰vimqe克aavq新wqoo闻g网o版权所有,请勿未授权转载!!!
虎xlcp泰yq克d新vnnla闻lu网hmz版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎c泰g克bcd新j闻ui网lx版权所有,请勿未授权转载!!!
虎r泰iw克dchhd新khli闻ljamz网fijsl版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎peqwl泰f克xm新kt闻f网e版权所有,请勿未授权转载!!!
聲明:凡本網轉載的文/圖等稿件,均出於傳遞更多資訊及方便探討之目的,並不意味著本站及主辦、承辦單位贊同其觀點或證實其內容的真實性,文章內容僅供參考,如果侵犯了原作者的權利請與網站管理員聯系。
評論清單
-
暫無數據