虎泰克博客

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


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

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

虎h泰quv克ye新kxrv闻r网p版权所有,请勿未授权转载!!!

 

虎ldt泰wgzx克khy新e_闻tii网o版权所有,请勿未授权转载!!!

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

虎slpjc泰xw_克flh新qirc闻api网uqm版权所有,请勿未授权转载!!!

 

虎szu泰jl克kif新mhq闻j网xs版权所有,请勿未授权转载!!!

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

虎_al泰p克xlsj新zuqt闻l网i版权所有,请勿未授权转载!!!

 

虎w泰gdd克cv新hwqxz闻iafcn网uf版权所有,请勿未授权转载!!!

a.php

虎o泰r克eqfis新buk闻y网cgkk版权所有,请勿未授权转载!!!

class a{

虎tqyj泰k克ldlyb新ii闻zpp网phz版权所有,请勿未授权转载!!!

    function __construct(){

虎ni泰jmsao克ndd新g闻_e网vmda版权所有,请勿未授权转载!!!

        echo 'a';

虎nslbu泰lvgy_克xjl_d新c闻hqkzo网fcjo版权所有,请勿未授权转载!!!

    }

虎xuh泰je克cazo新i闻nmwg网k版权所有,请勿未授权转载!!!

}

虎vengh泰zql克ivz新ufsf闻uda网e版权所有,请勿未授权转载!!!

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

虎blb_t泰aq克obmx新nfdl闻kuckl网jdi版权所有,请勿未授权转载!!!

include 'a.php';

虎br泰ptl克uf新apbf闻pzgr网k版权所有,请勿未授权转载!!!

class b extends a{

虎d泰jbcoq克f_新kto闻bj网qd版权所有,请勿未授权转载!!!

    function __construct(){

虎q泰m克xxh新dzf闻glw网goq版权所有,请勿未授权转载!!!

        echo 'b';

虎uhy泰f克otfq新dg闻pzc网kd版权所有,请勿未授权转载!!!

    }

虎p泰wng克osf新hoo闻fdnt网kiwta版权所有,请勿未授权转载!!!

}

虎lg泰mfr克p新wmi闻i网qn_版权所有,请勿未授权转载!!!

 

虎icbgc泰y克e_u_s新rtjju闻p网ts版权所有,请勿未授权转载!!!

$test=new b();

虎ifnk泰vjdpa克kjb_新wzkv闻iht网wcrgg版权所有,请勿未授权转载!!!

运行结果:

虎lic泰au克uf新vontc闻h_w网iai版权所有,请勿未授权转载!!!

b

虎f泰dii克ryud新bl闻lu网sag版权所有,请勿未授权转载!!!


虎zb泰_克fixs新vxso闻ai网llws版权所有,请勿未授权转载!!!

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

虎n_c泰igmuc克qnbu新mkdrv闻zaxwg网zogq版权所有,请勿未授权转载!!!

 

虎jshgl泰b克gpro新o闻d_obt网daf版权所有,请勿未授权转载!!!

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

虎zxm泰jkyo克b新t闻u网wusav版权所有,请勿未授权转载!!!

include 'a.php';

虎h泰m克ohzg新hdb闻n网xkk版权所有,请勿未授权转载!!!

class b extends a{

虎le泰twdb克ecg新hqz闻_vb网aheu版权所有,请勿未授权转载!!!

    function __construct(){

虎gd泰c克bph新nhch闻t网yis版权所有,请勿未授权转载!!!

        parent::__construct();

虎s泰ul克oiw新enxn闻jdki网r版权所有,请勿未授权转载!!!

        echo 'b';

虎d泰pjju克kugt新dw闻cc网mn版权所有,请勿未授权转载!!!

    }

虎z_c泰b克ks新i闻ymm网iwya版权所有,请勿未授权转载!!!

}

虎qc泰tt克fey新lbrqc闻h网rwwe版权所有,请勿未授权转载!!!

 

虎y泰lhleg克qchyb新njqf闻jxbzi网xiip版权所有,请勿未授权转载!!!

$test=new b();

虎asogb泰wlx克kvffi新eety闻x网lpe版权所有,请勿未授权转载!!!

那么输出结果是:

虎cn泰ecxf克kn新bfik闻f网hr版权所有,请勿未授权转载!!!

ab

虎t泰xbrse克_b新fjrn闻oqp网kk版权所有,请勿未授权转载!!!


虎_hawg泰ubqx克zeucm新b闻yac网vx版权所有,请勿未授权转载!!!

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

虎cjf泰hrb克c新rf_闻jk网wlk版权所有,请勿未授权转载!!!

 

虎vr泰hqfmv克hvox新t闻vzaw网_uyih版权所有,请勿未授权转载!!!

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

虎dpfo泰uvnm克n新zcy闻tqgr网jen_i版权所有,请勿未授权转载!!!

 

虎zbif泰jcpzh克eg新jlg_n闻bstg网_zaej版权所有,请勿未授权转载!!!

BaseAction.class.php

虎vx泰nf克p新f闻h网nlc版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎peemm泰wzyrw克qudj新utvg闻gzu网in版权所有,请勿未授权转载!!!

    public function _initialize(){

虎bdgsc泰ufj克r新fxpw闻nx网aet版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎tux泰b克_ccjp新ual闻_rblu网cdbkr版权所有,请勿未授权转载!!!

    }

虎gitzw泰brzmg克k新o_b闻o网pbke版权所有,请勿未授权转载!!!

}

虎afq泰d_eb克g新hw闻ngjo网ku版权所有,请勿未授权转载!!!


虎lop泰a克qhoa新m闻tr网yxia版权所有,请勿未授权转载!!!

IndexAction.class.php

虎a泰_克j新bd闻d网hv版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎bjybe泰mrpv克y新i闻dxdh网xurs版权所有,请勿未授权转载!!!

    public function (){

虎xijqm泰mjq克px新o闻je网q版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎y泰_u克njjki新zft闻h网rgkj版权所有,请勿未授权转载!!!

    }

虎eidhg泰cxxdb克ytcy新__闻dmle网ebdtl版权所有,请勿未授权转载!!!

}

虎odu泰rxm克hhb新qsmhc闻y网wk版权所有,请勿未授权转载!!!


虎skbqx泰ondl克nx新ajq闻shwy网hdzds版权所有,请勿未授权转载!!!

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

虎v_r泰ytzxb克ny新r闻_网qd版权所有,请勿未授权转载!!!

baseActionindexAcition

虎gziyt泰aeb克n新azzn闻vqm网bvyjr版权所有,请勿未授权转载!!!


虎b泰ytl克zjktu新al闻lng网qp版权所有,请勿未授权转载!!!

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

虎jtjcf泰nz克kxck新ribb闻b网eq版权所有,请勿未授权转载!!!

 

虎ohp_u泰v克orr新zjx闻krsvd网bji版权所有,请勿未授权转载!!!

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

虎a泰mads克py新oogpy闻pganf网fwf版权所有,请勿未授权转载!!!




声明:本ウェブサイトで転載された文章/図などの原稿は、より多くの情報を伝達し、検討する目的で、当駅と主催、運営者がその観点に賛同したり、内容の真実性を確認したりすることを意味していません。文章の内容はあくまで参考にしてください。もし原作者の権利を侵害したら、ウェブサイトの管理者に連絡してください。

ログインしてコメントを発表します。

コメントリスト

    データがありません