虎泰克博客

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


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

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

虎fxte泰vkdj克sz新tldbi闻gqji网p版权所有,请勿未授权转载!!!

 

虎xrz泰ymel克g新lklu闻cb网_i版权所有,请勿未授权转载!!!

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

虎oa泰tssm克vwvn新w_m闻a网i版权所有,请勿未授权转载!!!

 

虎oo泰oitv克sgxn新laa闻ghrha网nw版权所有,请勿未授权转载!!!

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

虎b泰hw克gto新vzj闻xh网ywua版权所有,请勿未授权转载!!!

 

虎olvvm泰xipl克osecd新ur闻v网l版权所有,请勿未授权转载!!!

a.php

虎sz泰rz克ak新ol_闻ircbx网zz版权所有,请勿未授权转载!!!

class a{

虎h泰sc克_s_i新bbna闻rr网c_o版权所有,请勿未授权转载!!!

    function __construct(){

虎hb泰dure克mjqz新gr闻m网d版权所有,请勿未授权转载!!!

        echo 'a';

虎va泰tr克qw新_pk闻itlb网rfwy版权所有,请勿未授权转载!!!

    }

虎g泰izdn克ah新xst闻l网ofu版权所有,请勿未授权转载!!!

}

虎uk泰kn克rzb新gbr闻ubtn网q_ff版权所有,请勿未授权转载!!!

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

虎it泰cgw克iy新e闻buzu网csgd版权所有,请勿未授权转载!!!

include 'a.php';

虎ker泰zuzw克l新mjovs闻nt网guhc版权所有,请勿未授权转载!!!

class b extends a{

虎xcqv泰nl克krd新k闻fidl网ohz版权所有,请勿未授权转载!!!

    function __construct(){

虎sq泰hbv_r克zump新egyp_闻ooohx网mncw版权所有,请勿未授权转载!!!

        echo 'b';

虎eyz泰qkrci克q新rle闻jo网eil版权所有,请勿未授权转载!!!

    }

虎l泰azs克luq新cy闻f网mf_版权所有,请勿未授权转载!!!

}

虎u泰lmfwp克micz新kp闻jes网nj版权所有,请勿未授权转载!!!

 

虎agjii泰n克u新trn闻vqo网r版权所有,请勿未授权转载!!!

$test=new b();

虎dud泰xiz克x新ktj闻v网sbzw版权所有,请勿未授权转载!!!

运行结果:

虎jyiij泰cyhl克y新vcq闻zwio网deeki版权所有,请勿未授权转载!!!

b

虎gzbde泰skesq克my新a_闻lhuub网ibkzo版权所有,请勿未授权转载!!!


虎q泰qphy克opsyb新y闻vrpx网dma版权所有,请勿未授权转载!!!

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

虎_qqm泰zew克uokie新gj闻h网sfkd版权所有,请勿未授权转载!!!

 

虎y_lta泰ysd_克aieas新ixf闻hey网ksuqy版权所有,请勿未授权转载!!!

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

虎j泰ikhmy克jyjpm新edy闻eqhx网pe版权所有,请勿未授权转载!!!

include 'a.php';

虎y泰cavt克_sg新ah闻q_网dsqs版权所有,请勿未授权转载!!!

class b extends a{

虎tu泰isga克g_z新hmgn闻d网io版权所有,请勿未授权转载!!!

    function __construct(){

虎yy泰o克jjs新pgi闻w网bnhkv版权所有,请勿未授权转载!!!

        parent::__construct();

虎jhh泰cckap克m_新shdcu闻l网ncekx版权所有,请勿未授权转载!!!

        echo 'b';

虎poxjy泰mp克dzmd新kio_p闻zbdq网d_yzh版权所有,请勿未授权转载!!!

    }

虎pnw泰h克n新hhyts闻w网okbom版权所有,请勿未授权转载!!!

}

虎yz_or泰sxgg克d新jyt闻nmiwb网wu版权所有,请勿未授权转载!!!

 

虎aamcd泰xsu克pog新wv闻vujcb网co版权所有,请勿未授权转载!!!

$test=new b();

虎wtywn泰q克xos新uybwa闻jd网z版权所有,请勿未授权转载!!!

那么输出结果是:

虎rdn泰swygc克_新zt闻bu网ziw版权所有,请勿未授权转载!!!

ab

虎f泰sgbx克x新ky闻c网cdko版权所有,请勿未授权转载!!!


虎uo泰rs克ct新hr闻sbmxy网nw版权所有,请勿未授权转载!!!

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

虎it泰_pbbr克i新yhgl闻_diai网daqf版权所有,请勿未授权转载!!!

 

虎xxjxg泰mewd克u新et闻_orrf网hb_版权所有,请勿未授权转载!!!

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

虎l泰dqcvq克xnha新ces闻mmu网_jcb版权所有,请勿未授权转载!!!

 

虎xqd泰lbgu克qg新gspsb闻u网j版权所有,请勿未授权转载!!!

BaseAction.class.php

虎inz泰puk克bbb新g_xt闻nkgaw网gza版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎s_泰eqkk克rnqk新gly闻e网a_xs版权所有,请勿未授权转载!!!

    public function _initialize(){

虎i泰xbl克spk新c闻fzs网dufq版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎gxbq泰fq克iukh新sr闻q网gbjfj版权所有,请勿未授权转载!!!

    }

虎dyz泰ochrw克emn新upr闻uadff网pz版权所有,请勿未授权转载!!!

}

虎iq泰tdegy克gffw新hr闻otd_c网hn版权所有,请勿未授权转载!!!


虎es泰h克heia新xldq闻_p网gw版权所有,请勿未授权转载!!!

IndexAction.class.php

虎_vf泰oklcx克gisbz新mpspu闻mio网ff版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎uv泰nuo克auf新rgp闻e网uwh版权所有,请勿未授权转载!!!

    public function (){

虎bxkh泰iys克uqhvc新dfhuk闻bsh网sqr版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎tppo泰g克hh_新xac闻hkne网t版权所有,请勿未授权转载!!!

    }

虎fmku泰hd克hfe新cpk闻_sen网xtp版权所有,请勿未授权转载!!!

}

虎ehl_泰jc_ud克zwawr新gq闻wsmon网k版权所有,请勿未授权转载!!!


虎q泰h克gh新q闻ohct网qrqmm版权所有,请勿未授权转载!!!

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

虎vhp泰zn克xd新u闻d_zr网s_版权所有,请勿未授权转载!!!

baseActionindexAcition

虎zt_mj泰e_q_克zt新iwa闻frr_k网unu_版权所有,请勿未授权转载!!!


虎vw泰wlzoz克m新og闻t网rrdta版权所有,请勿未授权转载!!!

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

虎oyy泰rroe克u新uyh闻mdf网ayk版权所有,请勿未授权转载!!!

 

虎alr泰pw_克er新z闻ju_网yrnai版权所有,请勿未授权转载!!!

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

虎d泰mla克qsg新kgqpm闻ebnd网g版权所有,请勿未授权转载!!!




Lausunto: kaikki tällä sivustolla olevat artikkelit / piirrokset on tarkoitus välittää enemmän tietoa ja helpottaa keskustelua, mikä ei tarkoita sitä, että sivusto, isäntä ja järjestäjä ovat samaa mieltä heidän mielipiteistään tai vahvistaa niiden sisällön aitoutta. Artikkelien sisältö on tarkoitettu ainoastaan viitteeksi. Jos alkuperäisen tekijän oikeuksia rikotaan, ota yhteyttä verkkosivuston ylläpitäjään.

Allekirjoitus ja kommentti

Kommenttien luettelo

    Ei tietoja