虎泰克博客

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


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

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

虎hmdj泰ay克_sic新yc闻f_vq网ow版权所有,请勿未授权转载!!!

 

虎iiycq泰nsctp克nv新drfwy闻vnkwr网yfsbx版权所有,请勿未授权转载!!!

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

虎b泰e克b新ldf闻p网gw版权所有,请勿未授权转载!!!

 

虎jqpnr泰u克x新f闻jbour网fnq版权所有,请勿未授权转载!!!

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

虎igu泰ndkqv克fsjg新dkjnm闻nrs网pm版权所有,请勿未授权转载!!!

 

虎aolq泰hvqu克zscfi新zyef闻lfv网phwc版权所有,请勿未授权转载!!!

a.php

虎p泰rf克yu新ni闻bj网qxj版权所有,请勿未授权转载!!!

class a{

虎i泰bdto克tinrs新ywla闻qb网dod版权所有,请勿未授权转载!!!

    function __construct(){

虎z_y泰dwed克pvgxo新mj闻yll网w版权所有,请勿未授权转载!!!

        echo 'a';

虎ykeyi泰p_zz_克sw新stb闻wux网xe版权所有,请勿未授权转载!!!

    }

虎ux泰dpq克vzso新eaz__闻rtqob网elo版权所有,请勿未授权转载!!!

}

虎sewn泰sno克qq新mjy闻y_j_u网b版权所有,请勿未授权转载!!!

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

虎izdqi泰a克kx新lj闻lu_网yi版权所有,请勿未授权转载!!!

include 'a.php';

虎u泰bqopi克de新o闻hxxp网sk版权所有,请勿未授权转载!!!

class b extends a{

虎twffn泰zuvzh克dv新p闻lz网hbh版权所有,请勿未授权转载!!!

    function __construct(){

虎prulq泰nzvdh克mrwki新l闻tlba网xyrw版权所有,请勿未授权转载!!!

        echo 'b';

虎kh泰_ojae克bu新l闻zp网tnl版权所有,请勿未授权转载!!!

    }

虎b泰yoo克bl_w新epbbz闻dnc网sonww版权所有,请勿未授权转载!!!

}

虎ob泰kja_克nuae新lapt闻atn网l版权所有,请勿未授权转载!!!

 

虎in泰qyx克xmaz新n闻cyiyv网m_ac版权所有,请勿未授权转载!!!

$test=new b();

虎sfn泰or克q新i闻sp网_gvfp版权所有,请勿未授权转载!!!

运行结果:

虎lz泰cbqrk克jkue新kctn闻w_网fzoqz版权所有,请勿未授权转载!!!

b

虎wd_r泰lmh克xqr新j_tn闻dc_网urrmr版权所有,请勿未授权转载!!!


虎i泰ivnl克qubf新c闻s网vtz版权所有,请勿未授权转载!!!

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

虎j泰bdfi克iuv新sh闻qcfv网pa版权所有,请勿未授权转载!!!

 

虎qhtne泰mge克paed新efikl闻lw网zf版权所有,请勿未授权转载!!!

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

虎fnq泰i克fgs_新dv闻tda网egvt_版权所有,请勿未授权转载!!!

include 'a.php';

虎u_b_泰qkew克hmblq新vtqvg闻lth网nvi_b版权所有,请勿未授权转载!!!

class b extends a{

虎wpt泰loy_b克hkx新tlqk闻z网pntt版权所有,请勿未授权转载!!!

    function __construct(){

虎tc泰ctan克cm_e新wgwmb闻drud网j版权所有,请勿未授权转载!!!

        parent::__construct();

虎_jxr泰mzwk克nh新lb闻xznp网nj版权所有,请勿未授权转载!!!

        echo 'b';

虎rrkdy泰a克vjrot新ly闻hy网lgbol版权所有,请勿未授权转载!!!

    }

虎rls_泰nq克hdzh新wnnfg闻gckt网ol版权所有,请勿未授权转载!!!

}

虎hvo_s泰n克i新ps闻zx网zb版权所有,请勿未授权转载!!!

 

虎jcrm泰pzkw克ofu新eoo闻surt网leofk版权所有,请勿未授权转载!!!

$test=new b();

虎wigt泰fnrir克eryqo新dbqai闻u网uq版权所有,请勿未授权转载!!!

那么输出结果是:

虎qx泰drhd克lnmfi新s闻mqvw网cf版权所有,请勿未授权转载!!!

ab

虎zgvx泰l克j新qemr闻bv网gwxo版权所有,请勿未授权转载!!!


虎dnf泰ebec克c_wme新ttb闻maw网bnhg版权所有,请勿未授权转载!!!

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

虎hd泰nydfr克idwv新fxz闻ajt网xg版权所有,请勿未授权转载!!!

 

虎rt泰c克xkj新s闻mdwi网o版权所有,请勿未授权转载!!!

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

虎zstw泰_xri克nrn新ltfi闻qhfc网x版权所有,请勿未授权转载!!!

 

虎ci泰_pe克dlom新hn闻fkuqb网kp版权所有,请勿未授权转载!!!

BaseAction.class.php

虎qdged泰g克pe新trpwp闻s网wxh版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎ou泰ekcry克sscb新uknq闻bur网_wxmz版权所有,请勿未授权转载!!!

    public function _initialize(){

虎fxujh泰lk克zj新blco闻vt网isy_版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎et泰okp克vreqt新iqdw闻wfa网wa版权所有,请勿未授权转载!!!

    }

虎ynaue泰a克isg新lgbch闻pyxi网b版权所有,请勿未授权转载!!!

}

虎kczzu泰dv克wr新qrubq闻l网bhmh版权所有,请勿未授权转载!!!


虎y_c_泰svs克_ng新gzt闻cltqx网kiurv版权所有,请勿未授权转载!!!

IndexAction.class.php

虎m泰evmvi克chaiv新_mu闻csh网ees版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎s泰_fd克j新bflme闻ybugj网cgp版权所有,请勿未授权转载!!!

    public function (){

虎a泰eeo克ipfuv新bswxt闻kql_v网vqns版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎q泰bmon克d新q闻cujsr网jeapt版权所有,请勿未授权转载!!!

    }

虎kikp泰cw克ns新oi闻zisj网qous版权所有,请勿未授权转载!!!

}

虎earun泰_克lqmgs新_q闻ya_b网du版权所有,请勿未授权转载!!!


虎rilm泰ymb克jck新n闻w网xg版权所有,请勿未授权转载!!!

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

虎yqy泰mg克mv新gdjt闻npa网jg版权所有,请勿未授权转载!!!

baseActionindexAcition

虎qjl泰hed克z新btwwo闻rn网isvah版权所有,请勿未授权转载!!!


虎nmxz泰rcl克d新v_jl闻rds网ryr版权所有,请勿未授权转载!!!

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

虎tearq泰pmugb克oecjf新qy闻ovvq网onl版权所有,请勿未授权转载!!!

 

虎nda泰v克bw新l_vck闻uyjdk网kepf版权所有,请勿未授权转载!!!

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

虎e泰jcunt克swqia新bs闻kvof网tex版权所有,请勿未授权转载!!!




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