ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 5371
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎xptio泰b克c新d闻z网tmvjt版权所有,请勿未授权转载!!!
虎nr_b泰gdb克_dazh新_r闻zk网nthh版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎sut泰wl克qycov新yf闻ka网ovyyi版权所有,请勿未授权转载!!!
虎ci泰dpw克z新buhbl闻hqs网dilo版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎zh泰xwe克uzav新uemrt闻hldin网pkqf版权所有,请勿未授权转载!!!
虎yta泰mrinr克dotrp新lgj闻rd网k版权所有,请勿未授权转载!!!
a.php
虎d泰jdsm克vzazx新esszn闻jhn网nyxsg版权所有,请勿未授权转载!!!
class a{
虎yrc泰_sw克bmoim新b闻pja网tert版权所有,请勿未授权转载!!!
function __construct(){
虎mqu泰cocbb克k_新vd闻cfmh网h版权所有,请勿未授权转载!!!
echo 'a';
虎jz泰psrbv克vkg新l闻xkw网fxl版权所有,请勿未授权转载!!!
}
虎lzz泰jtubr克o_新u闻xw网ut版权所有,请勿未授权转载!!!
}
虎pg泰t克ngole新g闻oe网eqwe版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎mi泰dpik克dadt新jtv闻xw网pb_版权所有,请勿未授权转载!!!
include 'a.php';
虎jipvg泰cypib克m新kh闻uy网z版权所有,请勿未授权转载!!!
class b extends a{
虎dpbzb泰mq克hb新k闻dei网ewhi版权所有,请勿未授权转载!!!
function __construct(){
虎kwwiz泰tw克kewu新fagv闻y网h_hoq版权所有,请勿未授权转载!!!
echo 'b';
虎sopkg泰q_ccq克ze新f闻fcfuo网b版权所有,请勿未授权转载!!!
}
虎lkout泰re克pf新cld闻id网tbzux版权所有,请勿未授权转载!!!
}
虎mj泰vvg克sb新f闻yaoen网wbw版权所有,请勿未授权转载!!!
虎ap_泰sr_克xu新gdn闻ocha网c_bua版权所有,请勿未授权转载!!!
$test=new b();
虎fyms泰bxg克yij新_闻i网rnnx版权所有,请勿未授权转载!!!
运行结果:
虎waj泰fu克w新mwmya闻vvi网fu版权所有,请勿未授权转载!!!
b
虎vys泰dnox克bjhv新se闻cisia网r版权所有,请勿未授权转载!!!
虎_da泰m克wvnso新xbb闻tmxkz网fjufe版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎xlq泰uzkc克tneo新tq闻ncr网d版权所有,请勿未授权转载!!!
虎isfu泰_克ykl新p_arm闻tf网tjb版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎y_泰gpy克zcw新esi闻fmpcp网aaqq版权所有,请勿未授权转载!!!
include 'a.php';
虎frzb泰bdvh克myp新ssgvj闻wbrx网h版权所有,请勿未授权转载!!!
class b extends a{
虎mdf泰ss克nvajt新t闻k_网qq版权所有,请勿未授权转载!!!
function __construct(){
虎bkpo泰q_克twc新ynwc闻rz网n_版权所有,请勿未授权转载!!!
parent::__construct();
虎hxfc泰hjesu克o_cz新_ego闻kma网nrj版权所有,请勿未授权转载!!!
echo 'b';
虎sf泰pni克p新wtfna闻i网dji版权所有,请勿未授权转载!!!
}
虎hqtej泰cqpm克_新gnv闻f网yo版权所有,请勿未授权转载!!!
}
虎kt泰t克ycii新_闻mshs网nvbrt版权所有,请勿未授权转载!!!
虎v__qw泰vajuf克w新_y闻rpbmk网sove版权所有,请勿未授权转载!!!
$test=new b();
虎pxke泰sqmw克tkml新fv闻oqtg网t版权所有,请勿未授权转载!!!
那么输出结果是:
虎ftur泰ja克gkm新f闻j网wkeph版权所有,请勿未授权转载!!!
ab
虎ek泰qdckm克o新ka闻vlias网nd_a版权所有,请勿未授权转载!!!
虎yrq泰nrx克bcjo新fn闻ds网zvx版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎v泰sph克xer新nnbcx闻qe网vwjth版权所有,请勿未授权转载!!!
虎ickz泰vnjxw克eniog新dz闻u网oraxk版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎nil泰u克eqnf新z闻lvkpf网vm版权所有,请勿未授权转载!!!
虎xiuj泰b克gbt新owelk闻zewag网bdm版权所有,请勿未授权转载!!!
BaseAction.class.php
虎fbun泰ch_克yys新jrew闻ulgo网_x_t版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎d_泰rosh克yhuc新x闻kzy网nagzd版权所有,请勿未授权转载!!!
public function _initialize(){
虎bz泰pcntj克jf新g闻ks网w版权所有,请勿未授权转载!!!
echo 'baseAction';
虎p泰gbbi克vk新xsdv闻in网mbb版权所有,请勿未授权转载!!!
}
虎bnry泰s克zouvq新czw闻x网rwbu版权所有,请勿未授权转载!!!
}
虎fd_泰qh克ji新f闻cedmf网j版权所有,请勿未授权转载!!!
虎wdlv泰_克akz新vl闻vp网kznu版权所有,请勿未授权转载!!!
IndexAction.class.php
虎erl泰qjfy克qznse新sf闻i网_teyc版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎e泰g克_iso新aq闻hgf网m_w版权所有,请勿未授权转载!!!
public function (){
虎iqbq泰ir克q新kl闻joe网gv_版权所有,请勿未授权转载!!!
echo 'indexAction';
虎o_泰tz克ppflw新wgng闻_qfi_网s版权所有,请勿未授权转载!!!
}
虎_agnz泰egg克fce新cdswr闻cndj网trp版权所有,请勿未授权转载!!!
}
虎laz泰us克lrmdv新zcgo闻_ep网j版权所有,请勿未授权转载!!!
虎wu泰fg克fnpuq新v_w闻gpwz网irx版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎f泰zxjbl克gcg新gejd闻z_fac网xmpi版权所有,请勿未授权转载!!!
baseActionindexAcition
虎n泰bdi_克dgmze新ej闻in网gnf版权所有,请勿未授权转载!!!
虎rt泰vxfhb克takpm新ttt闻lw网hjfs版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎pigx泰sw克yw新_闻fln网hhye版权所有,请勿未授权转载!!!
虎d泰anth克lg新nvbcs闻luet网sll版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎kewv泰tgy克sw新dcby闻i网cbu版权所有,请勿未授权转载!!!
声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。
评论列表
-
暂无数据