虎泰克博客

ThinkPHP中_initialize()和__construct()的不同


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版权所有,请勿未授权转载!!!




声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。

登录以发表评论

评论列表

    暂无数据