虎泰克博客

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


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

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

虎_iw泰jwcvo克rx新laoin闻bce网g版权所有,请勿未授权转载!!!

 

虎z泰elaf克q_wd新anwo闻j网kgekf版权所有,请勿未授权转载!!!

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

虎qf泰q克lx新hnpij闻ofv网x版权所有,请勿未授权转载!!!

 

虎ktxt泰jl克fuum新_zjx闻qavsu网kyj版权所有,请勿未授权转载!!!

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

虎hfnez泰qh克_v__新awga闻v网p版权所有,请勿未授权转载!!!

 

虎wi_up泰kroua克o新jfmzc闻nf网julaq版权所有,请勿未授权转载!!!

a.php

虎onhyj泰c克qvgcj新evj闻aaz网i版权所有,请勿未授权转载!!!

class a{

虎pi泰g克xx新_dmnl闻k网s版权所有,请勿未授权转载!!!

    function __construct(){

虎qvq泰tl克gts新ina闻fwms网nla版权所有,请勿未授权转载!!!

        echo 'a';

虎fe泰fhxp克jjba新z闻g_zhm网s版权所有,请勿未授权转载!!!

    }

虎xiw泰m克lp新_i闻c网xy版权所有,请勿未授权转载!!!

}

虎z泰b_jm克eiiu新hlvrv闻uts网byxyv版权所有,请勿未授权转载!!!

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

虎onx泰dahgd克mwmo新nmocp闻sbdn网y版权所有,请勿未授权转载!!!

include 'a.php';

虎wo泰wkg克oep新z闻vrt网dbrdg版权所有,请勿未授权转载!!!

class b extends a{

虎ugyep泰vkbzl克jlxz新c_agr闻c网bl版权所有,请勿未授权转载!!!

    function __construct(){

虎c泰oxx克f新_b闻uw网hulz版权所有,请勿未授权转载!!!

        echo 'b';

虎eqpmu泰btuva克whh新yuvya闻evaes网fhwmv版权所有,请勿未授权转载!!!

    }

虎g泰qc克igt新hqc闻vygh网o版权所有,请勿未授权转载!!!

}

虎s泰tlqe克kk新p闻kvrii网cvf版权所有,请勿未授权转载!!!

 

虎q泰bie克i新j闻wquvk网uzx版权所有,请勿未授权转载!!!

$test=new b();

虎mg泰op克fju新je闻f_icn网fdiq版权所有,请勿未授权转载!!!

运行结果:

虎app泰djszf克wmw新j闻go网mhuya版权所有,请勿未授权转载!!!

b

虎ux_泰psab克gprs新wh闻k_zp网ph版权所有,请勿未授权转载!!!


虎tq泰loq克vh新r闻lm网ugwu版权所有,请勿未授权转载!!!

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

虎bexp泰xy克kgskr新orfgk闻hfen网mo_t版权所有,请勿未授权转载!!!

 

虎kn泰dw克hd新bwg闻ji网dtgn版权所有,请勿未授权转载!!!

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

虎x泰pvwr克vn新fyde闻gcbc网igrws版权所有,请勿未授权转载!!!

include 'a.php';

虎euh泰yui克gt新tdfr闻ogz网bpvhi版权所有,请勿未授权转载!!!

class b extends a{

虎ge泰i克b新y闻j网_nw版权所有,请勿未授权转载!!!

    function __construct(){

虎j泰m克aqso新b闻pmz网oq版权所有,请勿未授权转载!!!

        parent::__construct();

虎dj泰p克jwnn新f闻sxl网ksf版权所有,请勿未授权转载!!!

        echo 'b';

虎p泰zxbhf克aivzj新xno闻rnlrs网q_r版权所有,请勿未授权转载!!!

    }

虎qchy泰eirzc克lzu新bl_zk闻dcyl_网cm版权所有,请勿未授权转载!!!

}

虎cuito泰r克p新losqs闻kuwa网cmh版权所有,请勿未授权转载!!!

 

虎_ih泰l克kjv_a新rk闻tmm网ygrpz版权所有,请勿未授权转载!!!

$test=new b();

虎ichy泰cbh克dld新itkg闻o网laugb版权所有,请勿未授权转载!!!

那么输出结果是:

虎uwg泰kqua_克an新yvipi闻cbvd网kptza版权所有,请勿未授权转载!!!

ab

虎ghyd泰nksp克sems新oceo闻qwhsy网qhau版权所有,请勿未授权转载!!!


虎vad泰wtcb克txa新mkze闻qva网k版权所有,请勿未授权转载!!!

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

虎lyyad泰tbu克uid__新ez闻ma网lx版权所有,请勿未授权转载!!!

 

虎plhdc泰jen_克nirx新bxkqd闻gylu网nw版权所有,请勿未授权转载!!!

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

虎u泰p克nk新wn闻d网meewp版权所有,请勿未授权转载!!!

 

虎tvihk泰s克wqr新io闻xh网i版权所有,请勿未授权转载!!!

BaseAction.class.php

虎tbz泰gp克djgj新tzd闻rhaqr网il版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎ru泰kaek克c新gezb闻jpu_网jqx版权所有,请勿未授权转载!!!

    public function _initialize(){

虎mgnu泰i克b新amuy闻hinqw网ji版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎ggjb泰l克y新koi闻ykew网bxooj版权所有,请勿未授权转载!!!

    }

虎sgwe泰wh克zbsz新olmo闻m网meb版权所有,请勿未授权转载!!!

}

虎wwy泰lyhq克z新o闻afs网sxmy版权所有,请勿未授权转载!!!


虎vowa泰s克pdto新euk闻curw网vdc版权所有,请勿未授权转载!!!

IndexAction.class.php

虎gpv泰mfahc克tgcn_新vcnib闻xzd网o版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎ff泰b克hkvww新mfxjw闻qhz网t版权所有,请勿未授权转载!!!

    public function (){

虎o泰ibt克qyzce新zopo闻bimq网owgj版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎ny泰rui克ms新dxwdv闻aeu网ao版权所有,请勿未授权转载!!!

    }

虎ir泰z_克ft新g闻amu_z网s版权所有,请勿未授权转载!!!

}

虎qw泰b克hu_c新yuzj闻qpow网l版权所有,请勿未授权转载!!!


虎nltc泰p克cp新swx闻z网wnapa版权所有,请勿未授权转载!!!

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

虎e泰ae克pbkvd新cn闻evq网painn版权所有,请勿未授权转载!!!

baseActionindexAcition

虎uuzu泰zp克z新hyhg闻k网smwrq版权所有,请勿未授权转载!!!


虎f泰fvtod克pcg新ix闻c网nsz版权所有,请勿未授权转载!!!

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

虎to泰lu克xd新hmow闻bg网bnx版权所有,请勿未授权转载!!!

 

虎e泰pkjuo克lbmxa新alzgn闻k网a版权所有,请勿未授权转载!!!

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

虎w泰zgmtm克mkt新nwyi闻jni网v版权所有,请勿未授权转载!!!




Déclaration: le fait que des articles tels que les textes et les graphiques reproduits sur le site Web ne signifie pas que la station et les organisateurs partagent leur point de vue ou confirment l 'authenticité de leur contenu ne signifie pas qu' ils ont pour objet de communiquer des informations supplémentaires et de faciliter la discussion.

Se connecter pour commenter

Liste des commentaires

    Données non disponibles