虎泰克博客

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


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

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

虎uwa泰htmrg克obh新drl闻o网d版权所有,请勿未授权转载!!!

 

虎albt泰dz_克wecl新u闻fqrfd网dxk版权所有,请勿未授权转载!!!

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

虎tssq泰wyyhn克qe新kaovf闻r网vl版权所有,请勿未授权转载!!!

 

虎r泰xgpp克xoam新dr闻pr网e版权所有,请勿未授权转载!!!

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

虎u_k泰wgp克m新mx闻kiqf网mxkl_版权所有,请勿未授权转载!!!

 

虎jrf泰rlhh克qnwtv新v闻q网gg版权所有,请勿未授权转载!!!

a.php

虎thwh泰sr克xoyd新_lump闻c网xas版权所有,请勿未授权转载!!!

class a{

虎x泰bef克bzz新pktb闻k网q版权所有,请勿未授权转载!!!

    function __construct(){

虎iubbd泰sexj克hod新xz闻opn网_ls版权所有,请勿未授权转载!!!

        echo 'a';

虎uf泰dodq克il新zm闻yndy网xiw版权所有,请勿未授权转载!!!

    }

虎m泰c克a新n闻ytxuy网m版权所有,请勿未授权转载!!!

}

虎xs泰gcvxy克uavhx新haopf闻e网hc版权所有,请勿未授权转载!!!

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

虎u_n泰ejf克y新nbka闻qgr网e版权所有,请勿未授权转载!!!

include 'a.php';

虎hqd泰cs克n新qshmh闻l网rg版权所有,请勿未授权转载!!!

class b extends a{

虎yz泰lpuc克ae新fv闻njvq网qdo版权所有,请勿未授权转载!!!

    function __construct(){

虎dve泰lzarx克jd新s闻ggs网umpr版权所有,请勿未授权转载!!!

        echo 'b';

虎cub泰xlur克pay新ozakd闻wfwb_网c_pmz版权所有,请勿未授权转载!!!

    }

虎rw泰yu_v克cok新mof闻l_hvq网pwl版权所有,请勿未授权转载!!!

}

虎d泰gra克qxoll新vgxhv闻mmoc网p版权所有,请勿未授权转载!!!

 

虎njci泰apz克zm新xhg闻c网jcxiv版权所有,请勿未授权转载!!!

$test=new b();

虎hr泰vszg克jjhy新l闻wz网df版权所有,请勿未授权转载!!!

运行结果:

虎yhhtc泰bx克rkrkb新_nz闻b_s网zz版权所有,请勿未授权转载!!!

b

虎md泰zfbv克th新dkr闻sy网qsike版权所有,请勿未授权转载!!!


虎kps泰dltf克ow新jcmme闻hfrqn网nor版权所有,请勿未授权转载!!!

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

虎cequk泰wy克nbi新i闻ylna网ektmo版权所有,请勿未授权转载!!!

 

虎e泰clo克kz新dkgh闻dob网k版权所有,请勿未授权转载!!!

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

虎o泰vzbpg克t新qfvl闻cg网tq版权所有,请勿未授权转载!!!

include 'a.php';

虎cllo泰jlz克j新dqx闻mwj网a版权所有,请勿未授权转载!!!

class b extends a{

虎lcwcv泰kleb克a新xcmn闻vmyqq网c_版权所有,请勿未授权转载!!!

    function __construct(){

虎y_o泰fydg克_c新lfmfp闻cduuh网uu版权所有,请勿未授权转载!!!

        parent::__construct();

虎jvd泰o_x克weqcj新ycixv闻yznm网a版权所有,请勿未授权转载!!!

        echo 'b';

虎k泰yxw克i新_eny闻xfcx网rnv版权所有,请勿未授权转载!!!

    }

虎iwr泰ywkj克k新gt闻rmqq网d版权所有,请勿未授权转载!!!

}

虎j泰m克_myq新l闻coi网zu_c版权所有,请勿未授权转载!!!

 

虎qdcpv泰j克xptq新ygxj闻_vqbs网qw版权所有,请勿未授权转载!!!

$test=new b();

虎fhrgu泰aot克hly新doam闻e_v_网mmuf版权所有,请勿未授权转载!!!

那么输出结果是:

虎u泰ynjku克z新inlg_闻z网weyau版权所有,请勿未授权转载!!!

ab

虎fqzj泰nkj克jnm新dy闻i网w版权所有,请勿未授权转载!!!


虎mvp泰ww克tla新cqtor闻hhqjs网ad版权所有,请勿未授权转载!!!

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

虎m泰vqx克obs新h闻gb网xiqt版权所有,请勿未授权转载!!!

 

虎npouw泰kg克uypv新cfk闻qzc网su版权所有,请勿未授权转载!!!

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

虎iavk泰drh克ludos新p闻oapl网uv版权所有,请勿未授权转载!!!

 

虎f泰ya克_ybtc新zhni闻b网orpt版权所有,请勿未授权转载!!!

BaseAction.class.php

虎jocoz泰rvl克tzr新mdj闻jrb网rfhi版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎jdxn泰nztr克ch新ny闻vo网au版权所有,请勿未授权转载!!!

    public function _initialize(){

虎nz泰qj克hfavd新lvz闻vse网nuctc版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎ky泰ux克g_up新b闻h网ysqx版权所有,请勿未授权转载!!!

    }

虎v泰rgckx克guk新m闻fuibs网psajp版权所有,请勿未授权转载!!!

}

虎zq泰cl_uf克qp新k闻gnhwz网z版权所有,请勿未授权转载!!!


虎xszd泰ihqfg克y新hwkl_闻mku网h版权所有,请勿未授权转载!!!

IndexAction.class.php

虎nazg泰lgeh克ihy_新a闻mzwfl网erec版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎ebkx泰lzeo克cj新wbs闻pgrya网wnlu版权所有,请勿未授权转载!!!

    public function (){

虎qqg泰ot克qcx新n闻swfbj网_hlwm版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎lqca泰e克kvlkj新m闻bv_w网x版权所有,请勿未授权转载!!!

    }

虎aj_x泰a克h_rzs新qesg闻vj网w版权所有,请勿未授权转载!!!

}

虎p_x泰etvqo克talck新o闻wso网rbu版权所有,请勿未授权转载!!!


虎uuqwg泰oxtmx克draw新pap闻i网t版权所有,请勿未授权转载!!!

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

虎rkuq泰obx克anp新yfgcg闻pcu网iikx版权所有,请勿未授权转载!!!

baseActionindexAcition

虎yrchx泰g克uw新xcowc闻pbrw网w版权所有,请勿未授权转载!!!


虎sei泰eq克r新ix闻t网pb版权所有,请勿未授权转载!!!

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

虎hymt泰vh克bdetd新oeppz闻qqcy网ty版权所有,请勿未授权转载!!!

 

虎lnh泰n克vow新kuc闻q网m版权所有,请勿未授权转载!!!

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

虎bg泰lrbjw克nk新mkh闻fs网nbs版权所有,请勿未授权转载!!!




Erklärung: Alle auf dieser Website wiedergegebenen Artikel /Zeichnungen dienen dem Zweck, mehr Informationen zu übermitteln und die Diskussion zu erleichtern, was nicht bedeutet, dass die Website, der Host und der Veranstalter mit ihren Meinungen einverstanden sind oder die Authentizität ihrer Inhalte bestätigen. Der Inhalt der Artikel dient nur als Referenz. Wenn die Rechte des ursprünglichen Autors verletzt werden, wenden Sie sich bitte an den Verwalter der Website.

Melden Sie sich an

Liste der Kommentare

    Keine Daten