虎泰克博客

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


ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函

ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?

虎bcgg泰wqm_t克r新el闻j网rfl版权所有,请勿未授权转载!!!

 

虎arxh泰pn克z新abe闻jfljq网lihd版权所有,请勿未授权转载!!!

在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?

虎av_nj泰rjm克v新j闻baeb网gq版权所有,请勿未授权转载!!!

 

虎lhbwp泰udpf克i新arbb闻e网d版权所有,请勿未授权转载!!!

自己试一下就知道两者的不同了。

虎uxvxr泰ap_克idph新eyipm闻zoh_k网jqbhv版权所有,请勿未授权转载!!!

 

虎pp泰teo克y新sigui闻re网r版权所有,请勿未授权转载!!!

a.php

虎njg泰vfg克ekixe新wi闻p网cnc版权所有,请勿未授权转载!!!

class a{

虎car泰tqsv克ovec新zv_nz闻ikyo网fyyuv版权所有,请勿未授权转载!!!

    function __construct(){

虎uh_mk泰p克w新v闻wqcbe网nh版权所有,请勿未授权转载!!!

        echo 'a';

虎g泰q_克vadb新owi闻ftnlk网pte版权所有,请勿未授权转载!!!

    }

虎j泰btvr克ciid新oda闻j网hkh版权所有,请勿未授权转载!!!

}

虎a泰zzyxx克lddmk新cx闻wcma网iszix版权所有,请勿未授权转载!!!

b.php(注意:这里构造函数没有调用parent::__construct();)

虎vvfl泰ha克aj新t闻a网sz_ox版权所有,请勿未授权转载!!!

include 'a.php';

虎agxr泰l克fttf新q闻z网gpba版权所有,请勿未授权转载!!!

class b extends a{

虎w泰k_csd克rk新b闻vwfib网ev版权所有,请勿未授权转载!!!

    function __construct(){

虎blu泰n_克rhahp新xzz闻ghys网memd版权所有,请勿未授权转载!!!

        echo 'b';

虎r泰s克lz新qid闻vgjy网iyr版权所有,请勿未授权转载!!!

    }

虎gqby泰_da_克fv新xu闻gswy网tot版权所有,请勿未授权转载!!!

}

虎wx泰wtlpa克h新qmbym闻rted网ovan版权所有,请勿未授权转载!!!

 

虎y_ax泰c克b新kkk闻gigf网qbj版权所有,请勿未授权转载!!!

$test=new b();

虎swisa泰jxdsd克iw新rmtm闻b_网bsgdl版权所有,请勿未授权转载!!!

运行结果:

虎bd泰y克uf新e闻aezc网setyx版权所有,请勿未授权转载!!!

b

虎e泰lvkhe克nqw新gr闻vifgs网idqo版权所有,请勿未授权转载!!!


虎s泰zluw克jd新owb闻f网lfla版权所有,请勿未授权转载!!!

可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。

虎lmn泰rq克ai新u闻vosx网le版权所有,请勿未授权转载!!!

 

虎fcs泰muq克fad新remd闻fbyf网whv版权所有,请勿未授权转载!!!

如果b.php的构造函数加上parent::__construct(),就不同了。

虎fkh泰zqqy克kozpm新o闻nyip网c_版权所有,请勿未授权转载!!!

include 'a.php';

虎xjzhw泰g克fu新wfikz闻u网ief版权所有,请勿未授权转载!!!

class b extends a{

虎ikrgs泰y克t新uo_闻gswjc网_版权所有,请勿未授权转载!!!

    function __construct(){

虎b泰juaq克xsn新javre闻muh网q版权所有,请勿未授权转载!!!

        parent::__construct();

虎oa泰ovmy克oo新rzn闻rwiw网ldsjz版权所有,请勿未授权转载!!!

        echo 'b';

虎ckjk泰dsi_克zysgx新eyu闻yk网t版权所有,请勿未授权转载!!!

    }

虎eiuu泰gtww克dkbw新rfv闻vltfd网j版权所有,请勿未授权转载!!!

}

虎b泰uwq克d新z闻quu_s网p版权所有,请勿未授权转载!!!

 

虎l泰sq克itqmx新qaasc闻dqcz网oho版权所有,请勿未授权转载!!!

$test=new b();

虎vmml泰y克katee新xlto闻z网og版权所有,请勿未授权转载!!!

那么输出结果是:

虎zhxda泰mgh克dz新zt_hv闻dp网lymvd版权所有,请勿未授权转载!!!

ab

虎l泰se克ajeh新zc_rt闻egoe网r_jz版权所有,请勿未授权转载!!!


虎oi泰orua克qw新cqd闻x_dc网ahp版权所有,请勿未授权转载!!!

此时才执行了父类的构造函数。

虎msv泰zug克dq新gdg闻onhn网c_p版权所有,请勿未授权转载!!!

 

虎d泰rwbse克mab新ecgn闻namad网igik版权所有,请勿未授权转载!!!

我们再来看看thinkphp的_initialize()函数。

虎ln泰ahb克hgs新ul闻gkh网ywu版权所有,请勿未授权转载!!!

 

虎dflx泰x克_irj新ruv闻l网owo版权所有,请勿未授权转载!!!

BaseAction.class.php

虎mxhg泰g克fstq新oi闻xt网yzlut版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎kt泰g克fxf新ng闻kn网w版权所有,请勿未授权转载!!!

    public function _initialize(){

虎swv泰_bdt克ahowj新npbv闻if网ch_rw版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎iiurg泰aef克yteto新d闻islrt网me版权所有,请勿未授权转载!!!

    }

虎n泰mr克xe新j闻ypgy网ibhbu版权所有,请勿未授权转载!!!

}

虎gwcj泰p克d新mfhk_闻rfss网odp版权所有,请勿未授权转载!!!


虎rk泰et克snl新igdu闻q网o版权所有,请勿未授权转载!!!

IndexAction.class.php

虎_泰zi克x新rj闻nrpu网h版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎qsv泰w克_新nl闻y网oxdz版权所有,请勿未授权转载!!!

    public function (){

虎njy泰vd克xasjc新vuf_k闻_c网tpmg版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎p_泰jdha克ygp新_闻bee网efjw版权所有,请勿未授权转载!!!

    }

虎rvb泰esic克ghhre新fz闻yfu网dhhfh版权所有,请勿未授权转载!!!

}

虎kfgjm泰rcr克xna新ui闻ib网kqbe版权所有,请勿未授权转载!!!


虎gkqqp泰yrp克vhi新qdeqb闻umly网tz版权所有,请勿未授权转载!!!

运行Index下的index方法,输出结果:

虎dq泰zvbxm克nlr新t闻h网mcp版权所有,请勿未授权转载!!!

baseActionindexAcition

虎onxr泰pgqqg克zr新v闻cg网u版权所有,请勿未授权转载!!!


虎x泰qf克hqvi新kjij闻pp网g版权所有,请勿未授权转载!!!

可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();

虎tgpg泰tvthh克ut新gup闻ulo网zxhvo版权所有,请勿未授权转载!!!

 

虎vxby泰r克ejktn新y闻q网jyyjg版权所有,请勿未授权转载!!!

这就是ThinkPHP中_initialize()和__construct()的不同。

虎umbhn泰ja克hh新b闻daofj网os版权所有,请勿未授权转载!!!




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

登录以发表评论

评论列表

    暂无数据