虎泰克博客

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


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

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

虎uu泰hxql克a新a闻tgfax网fsgqm版权所有,请勿未授权转载!!!

 

虎hrfmo泰uw克vezp新ekkl闻iz网fmj版权所有,请勿未授权转载!!!

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

虎ppy泰y克mt_fs新yquj闻orjx网tewe版权所有,请勿未授权转载!!!

 

虎ven_q泰wb克qbim新xpt闻nd网vy版权所有,请勿未授权转载!!!

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

虎gakw泰mz克gegyq新p闻mumra网j版权所有,请勿未授权转载!!!

 

虎ut泰fc克fu新m闻hpud网tgrm版权所有,请勿未授权转载!!!

a.php

虎tl泰pevv克runfj新l闻had网aokts版权所有,请勿未授权转载!!!

class a{

虎syum泰irfi克f新j闻yfa网i版权所有,请勿未授权转载!!!

    function __construct(){

虎fg泰gize克xo新mpud闻i网rcuc版权所有,请勿未授权转载!!!

        echo 'a';

虎tkwr泰bnyco克yfhtp新ubhic闻bden网co版权所有,请勿未授权转载!!!

    }

虎m泰kh克q新p闻tyu网lfzc版权所有,请勿未授权转载!!!

}

虎nikwu泰li克gtjsd新fdnhn闻vw网df版权所有,请勿未授权转载!!!

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

虎_oli泰tef克ikvqk新pqaf闻v网_xqfm版权所有,请勿未授权转载!!!

include 'a.php';

虎_jqek泰vb克jrk新vxu闻jdsfi网opt版权所有,请勿未授权转载!!!

class b extends a{

虎nmq泰koi克gtj新ekx闻ya_网fimpq版权所有,请勿未授权转载!!!

    function __construct(){

虎xqge泰egzcx克z新xyv闻ltyog网sss版权所有,请勿未授权转载!!!

        echo 'b';

虎tuj泰jsuu克uc新gv闻vnp网a版权所有,请勿未授权转载!!!

    }

虎tu_泰vgxkw克j新rrl闻xzk网hm版权所有,请勿未授权转载!!!

}

虎c_il泰kaoup克hgnot新u闻utxgx网w版权所有,请勿未授权转载!!!

 

虎bowfe泰h克gma新_闻cl网p版权所有,请勿未授权转载!!!

$test=new b();

虎e泰vg克cbad新sbbk闻teutv网lblvf版权所有,请勿未授权转载!!!

运行结果:

虎hwvdf泰z克beb新lljam闻pwxgl网ml_版权所有,请勿未授权转载!!!

b

虎u泰_ou克pnzz新bu闻f网r版权所有,请勿未授权转载!!!


虎e泰ar克spg新jv闻ghi网e版权所有,请勿未授权转载!!!

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

虎mrmjt泰pb克hjbw新yna闻yi网tkih版权所有,请勿未授权转载!!!

 

虎b泰sa克m新qc闻n网e版权所有,请勿未授权转载!!!

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

虎laliv泰ak克jjs新gj闻yr网g_版权所有,请勿未授权转载!!!

include 'a.php';

虎spzih泰lsof克iren新nmjy闻zzl网mvree版权所有,请勿未授权转载!!!

class b extends a{

虎wksa泰osy克el_新x闻ovz网eo版权所有,请勿未授权转载!!!

    function __construct(){

虎rft泰yjyun克dh新wiyms闻pdm网adjj版权所有,请勿未授权转载!!!

        parent::__construct();

虎rytia泰wiu克za新agyit闻xpc网hwciv版权所有,请勿未授权转载!!!

        echo 'b';

虎kn泰cpc克sjuc新tc闻ke_网ufk_f版权所有,请勿未授权转载!!!

    }

虎ku泰yizev克_a新xy闻otud网n版权所有,请勿未授权转载!!!

}

虎ewror泰gdm克y新e闻yfmlc网mo版权所有,请勿未授权转载!!!

 

虎po泰geh克zue新hrnk闻ts网d版权所有,请勿未授权转载!!!

$test=new b();

虎obxtg泰tt克_y新mq闻ade_o网km版权所有,请勿未授权转载!!!

那么输出结果是:

虎ejrab泰wrq克bj新dwx闻jfkn网iumu版权所有,请勿未授权转载!!!

ab

虎ecrp泰rg克tp新_s闻nqb网qsfik版权所有,请勿未授权转载!!!


虎t泰hr克cxfa新s闻berth网_版权所有,请勿未授权转载!!!

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

虎k泰ifr克_新cxrey闻hsswr网t版权所有,请勿未授权转载!!!

 

虎zozk泰pz克y新b闻i网lvqvs版权所有,请勿未授权转载!!!

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

虎n泰ij克z_m新kmhgu闻ua网ls版权所有,请勿未授权转载!!!

 

虎z泰q克nhyyx新uglob闻q网k版权所有,请勿未授权转载!!!

BaseAction.class.php

虎wzprr泰ee克k新y闻k_b网hatg版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎tysi泰oedz克mqk新rwiie闻njilr网fj版权所有,请勿未授权转载!!!

    public function _initialize(){

虎nlgn泰gqpif克kpj新no闻zgx网fc版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎nteq泰v克t新ra闻jgbw网r版权所有,请勿未授权转载!!!

    }

虎rui_b泰fm克wmz新opwep闻pprv网ogswu版权所有,请勿未授权转载!!!

}

虎xdu泰e克vl新frwtv闻jhq网rnul版权所有,请勿未授权转载!!!


虎vfroa泰qb克thg新irtwm闻al网pt版权所有,请勿未授权转载!!!

IndexAction.class.php

虎lbt泰m克_tbdl新cemrt闻tqrx网vxhiq版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎cmsqv泰dktb克xg新oblbs闻fzroc网ted版权所有,请勿未授权转载!!!

    public function (){

虎l泰r克ero新hyb闻yt网pnzu版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎d泰_sjg克pvy新y_suv闻memam网nt版权所有,请勿未授权转载!!!

    }

虎pv泰pmi克m新_b闻jp网x版权所有,请勿未授权转载!!!

}

虎j泰dmmve克wn_ww新kjpn闻zvzx网njo版权所有,请勿未授权转载!!!


虎_odx泰rmx克c新dx闻vcaiv网pkwty版权所有,请勿未授权转载!!!

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

虎ngbf泰hq_克s新a闻uadi网xolk版权所有,请勿未授权转载!!!

baseActionindexAcition

虎qrt泰dvmq克zbo新bn_n闻k网plwa版权所有,请勿未授权转载!!!


虎c_rpc泰ad_克bwapw新muqt闻qd网c版权所有,请勿未授权转载!!!

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

虎wmdm泰v克xs新olnc闻fuvme网eps版权所有,请勿未授权转载!!!

 

虎xcw泰tplc克dd新z闻kjhn网sdbc版权所有,请勿未授权转载!!!

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

虎acnx泰sskc克icq新whzj闻sen_v网dnll版权所有,请勿未授权转载!!!




Declaração: todos OS artigos / desenhos reproduzidos Neste site têm por objectivo TRANSMITIR Mais informações e facilitar a discussão, o que não significa que o site, o anfitrião e o organizador concordem com as SUAS opiniões ou confirmem a autenticidade do SEU conteúdo. O conteúdo DOS artigos é apenas para referência. Se OS direitos do autor original forem violados, contacte o Administrador do site.

Assine para comentar.

Lista de comentários

    Sem dados