虎泰克博客

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


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

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

虎foct泰kyapn克ffyw新iasj_闻dns网zbq版权所有,请勿未授权转载!!!

 

虎ctnc泰xo克cth_n新wrtm闻mgu网qdqt版权所有,请勿未授权转载!!!

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

虎z泰sr克qvfu新sav闻r网xo版权所有,请勿未授权转载!!!

 

虎fisi泰nhm克g新gu闻vvh网_版权所有,请勿未授权转载!!!

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

虎tbw泰wde克g新prtgw闻nj网bes版权所有,请勿未授权转载!!!

 

虎ianzy泰qitx克yib新uswot闻b网anc版权所有,请勿未授权转载!!!

a.php

虎nkxgi泰ndy克vpa新pcir闻wgwx网vr版权所有,请勿未授权转载!!!

class a{

虎sx泰jjnvm克_mj新gjsmx闻xrcfo网snqg版权所有,请勿未授权转载!!!

    function __construct(){

虎oozen泰wfgj克zdlez新b闻fmj网juj版权所有,请勿未授权转载!!!

        echo 'a';

虎lvd泰psxe克c新v闻tcmso网yxd版权所有,请勿未授权转载!!!

    }

虎s泰oc克_ohx_新yw闻tys网dahx版权所有,请勿未授权转载!!!

}

虎ymtov泰xiag克ftm新k闻sdvz网abtk版权所有,请勿未授权转载!!!

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

虎anwe泰d克bickq新_pk闻xyvs网kx版权所有,请勿未授权转载!!!

include 'a.php';

虎kyod泰zpjp克n新olxyz闻a网srw_版权所有,请勿未授权转载!!!

class b extends a{

虎q泰wjhgv克yg新hadyw闻p网joocq版权所有,请勿未授权转载!!!

    function __construct(){

虎ny泰n克oaab_新gt闻v网v版权所有,请勿未授权转载!!!

        echo 'b';

虎hwll泰yviwd克il新xldfx闻sepp网x_eta版权所有,请勿未授权转载!!!

    }

虎mzxmq泰v克gx_新i闻ajshc网rs版权所有,请勿未授权转载!!!

}

虎pst泰fe克idp新cmr闻icbny网ywob版权所有,请勿未授权转载!!!

 

虎hd泰dsxy克ypegj新jcmc闻rm_eb网rpt版权所有,请勿未授权转载!!!

$test=new b();

虎j泰r克_ahak新uxcfc闻gxq网jj版权所有,请勿未授权转载!!!

运行结果:

虎djw泰xmnsz克shhk新k_n闻yqrg网kuh版权所有,请勿未授权转载!!!

b

虎yhna泰asl克kck_y新ex闻h网cz版权所有,请勿未授权转载!!!


虎_dmoi泰m克dhf新ofhmg闻ohagy网ph_he版权所有,请勿未授权转载!!!

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

虎i泰rdqon克epgyf新iysh闻_n网d版权所有,请勿未授权转载!!!

 

虎jwt泰zechs克qxfo新ofpt闻uvr网ipx版权所有,请勿未授权转载!!!

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

虎pblfs泰lckz克wh新ifpu闻uk网u版权所有,请勿未授权转载!!!

include 'a.php';

虎mp_c泰xs克b新i闻csxre网q版权所有,请勿未授权转载!!!

class b extends a{

虎dp泰ci克kis新agfqe闻o网nbls版权所有,请勿未授权转载!!!

    function __construct(){

虎ske泰zxamx克wt新ms闻qc网ev版权所有,请勿未授权转载!!!

        parent::__construct();

虎is泰vngax克dhdch新dm闻op网jvap版权所有,请勿未授权转载!!!

        echo 'b';

虎txxn泰c克h新mfexb闻qti网j版权所有,请勿未授权转载!!!

    }

虎yupep泰tt克sdkdq新st闻_uyw网br版权所有,请勿未授权转载!!!

}

虎eozq泰odv克htrq新tshd闻txqu网tn版权所有,请勿未授权转载!!!

 

虎nohz泰k克jgga新ny闻uxd网y版权所有,请勿未授权转载!!!

$test=new b();

虎w泰qt克qhi新qdu闻e_k网hd版权所有,请勿未授权转载!!!

那么输出结果是:

虎wmym泰ok克kyfil新a闻pi网zhs版权所有,请勿未授权转载!!!

ab

虎rc泰wbe克flj新es闻jelja网mo版权所有,请勿未授权转载!!!


虎xvju泰rkm克tpcgg新c闻kl网lgpx版权所有,请勿未授权转载!!!

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

虎pmzc泰yddal克l新qpq闻yyeng网ep版权所有,请勿未授权转载!!!

 

虎_w泰utyn克o新ozagx闻cwr网dj版权所有,请勿未授权转载!!!

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

虎zcstf泰kk克rxj新k闻e_wf网xlx_b版权所有,请勿未授权转载!!!

 

虎bs泰ls克wmxqv新jrux闻qoq网x版权所有,请勿未授权转载!!!

BaseAction.class.php

虎smjsq泰kyr克ph新kup闻ztip网ezcw版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎q_q泰legwr克g新lagir闻j_lf网tu_mr版权所有,请勿未授权转载!!!

    public function _initialize(){

虎aiqh泰vrl克spv新jijhg闻ub_qi网s_pyf版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎zl泰ly克fnbw新gyr闻ybnms网qig版权所有,请勿未授权转载!!!

    }

虎xoof泰w克xw新arjby闻stpkx网sfhx版权所有,请勿未授权转载!!!

}

虎j泰umiz克god新xpq闻mqrt网rpaih版权所有,请勿未授权转载!!!


虎ltzl泰dmk克r新ce闻tsxo网gm版权所有,请勿未授权转载!!!

IndexAction.class.php

虎jll泰w克iu新tm_闻qtqkt网q版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎afmk泰p克yuomb新xow闻veea网alywr版权所有,请勿未授权转载!!!

    public function (){

虎b泰h克lra新rda闻uk_le网qsd版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎ibg泰_yw克pyfv新iuda闻ond网dur版权所有,请勿未授权转载!!!

    }

虎d泰quvo克pol新jtlk闻eoo网jops版权所有,请勿未授权转载!!!

}

虎q泰c克ayya新nw闻ru网egtid版权所有,请勿未授权转载!!!


虎p泰d_克zwmn新ubtk闻h网ypi版权所有,请勿未授权转载!!!

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

虎l泰i_wwf克da新f闻rs网xvj版权所有,请勿未授权转载!!!

baseActionindexAcition

虎vusb泰mk克g_k新lbd闻qy网lzh版权所有,请勿未授权转载!!!


虎sl泰anns克nht新xur闻tc__q网iaxrw版权所有,请勿未授权转载!!!

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

虎qpu泰uw克mb新elekd闻dx网xv版权所有,请勿未授权转载!!!

 

虎ec泰gvjk克e新yowro闻m网tyxly版权所有,请勿未授权转载!!!

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

虎md泰ulzxw克w新elwsu闻c网tjwpb版权所有,请勿未授权转载!!!




Declaración: los textos que se reproducen en la red, como textos / gráficos, tienen por objeto transmitir más información y facilitar las deliberaciones, y no implican que el sitio y los patrocinadores o patrocinadores compartan sus opiniones o confirmen la autenticidad de su contenido, que sólo es de carácter informativo y que si se violan los derechos de los autores originales, por favor se pongan en contacto con el Administrador del sitio web.

Gracias por tu comentario.

Lista de comentarios

    Datos no disponibles