虎泰克博客

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


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

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

虎wd泰pgiu克y新g闻j网de版权所有,请勿未授权转载!!!

 

虎vfd泰_aol克n_c新oi_tb闻t网por版权所有,请勿未授权转载!!!

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

虎eqrw泰ezlv克b新ixg闻xjz网dwo版权所有,请勿未授权转载!!!

 

虎rihqf泰uynw克ak新ugnmd闻xj网sdfim版权所有,请勿未授权转载!!!

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

虎ya_la泰x克_igw新bevfv闻pomem网kd版权所有,请勿未授权转载!!!

 

虎at泰xvpb克csyru新pp_闻wvs网su版权所有,请勿未授权转载!!!

a.php

虎mxe泰gx克kcqmi新wndwe闻hydop网svhhj版权所有,请勿未授权转载!!!

class a{

虎juad泰dee克dplf新ctwh闻e网ikv版权所有,请勿未授权转载!!!

    function __construct(){

虎rideu泰_克bb新nh闻jt网hkr版权所有,请勿未授权转载!!!

        echo 'a';

虎vwz泰gtg克e新xv闻yrxax网asnt版权所有,请勿未授权转载!!!

    }

虎tz泰py克oco新ue_o闻sdw_网rf_y版权所有,请勿未授权转载!!!

}

虎zscr泰e克fg新kwk闻csvye网ox_a版权所有,请勿未授权转载!!!

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

虎ztlm泰yj_k克pbki新hwde闻pxm网i版权所有,请勿未授权转载!!!

include 'a.php';

虎xkqko泰s克csjb新bqrbl闻icp网q版权所有,请勿未授权转载!!!

class b extends a{

虎zonlf泰bs克tbcy新h闻rzlh网v_xm版权所有,请勿未授权转载!!!

    function __construct(){

虎m泰tzf克djlxv新gmcw闻y网ko版权所有,请勿未授权转载!!!

        echo 'b';

虎zuh_泰aedwr克ba新jp闻yhvr网n版权所有,请勿未授权转载!!!

    }

虎bvl_泰u_x克aif新ptf闻gzbwo网bpsmc版权所有,请勿未授权转载!!!

}

虎sj泰bzeoe克lxqs_新lid_闻nv_网o版权所有,请勿未授权转载!!!

 

虎mb泰h_it克lq新pdk闻fuxp网l版权所有,请勿未授权转载!!!

$test=new b();

虎v泰rst克qks新xjs闻o网zrv版权所有,请勿未授权转载!!!

运行结果:

虎o泰_ix克ndi新mznug闻m网iwu版权所有,请勿未授权转载!!!

b

虎nkuly泰zuhxl克vau新wt_k闻ol网q版权所有,请勿未授权转载!!!


虎yot_x泰n克bhmnk新dwsbo闻w网jwv版权所有,请勿未授权转载!!!

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

虎p泰hc克jypf新tv闻fyos网uvvh版权所有,请勿未授权转载!!!

 

虎uhay泰raprj克qd新fp闻pinm网p版权所有,请勿未授权转载!!!

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

虎xj泰z克v新r闻pudsf网c版权所有,请勿未授权转载!!!

include 'a.php';

虎q泰eph克mmzb新tii_闻wv网b版权所有,请勿未授权转载!!!

class b extends a{

虎oy泰ka克wnbu新zecz闻klki网vjbto版权所有,请勿未授权转载!!!

    function __construct(){

虎u泰ds克hh新z闻wv网zso版权所有,请勿未授权转载!!!

        parent::__construct();

虎qpsr_泰vbxf克axlk新e_he闻lakbc网lxg版权所有,请勿未授权转载!!!

        echo 'b';

虎e泰nv克qkfo新yosym闻ez网u版权所有,请勿未授权转载!!!

    }

虎f泰afxyb克zwrsg新ct闻swsj_网sy版权所有,请勿未授权转载!!!

}

虎n泰v克tgn新_闻wqtdv网m版权所有,请勿未授权转载!!!

 

虎psje泰c克r新j闻guza网fjb版权所有,请勿未授权转载!!!

$test=new b();

虎h泰mwj克oo新dxjjj闻yzf_u网e版权所有,请勿未授权转载!!!

那么输出结果是:

虎zmk泰xjw克r新csb闻h_网eshr版权所有,请勿未授权转载!!!

ab

虎q泰o克bp新yd闻eit_d网_zfma版权所有,请勿未授权转载!!!


虎kdw泰y克wkt新hrbh闻yvoy网gppt版权所有,请勿未授权转载!!!

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

虎gowj泰nswpk克swe新aty闻uql网ubdf版权所有,请勿未授权转载!!!

 

虎h泰vzw克avg新zgfey闻dwqcb网sgacu版权所有,请勿未授权转载!!!

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

虎qpop泰f克l新mpc闻xsi网ro版权所有,请勿未授权转载!!!

 

虎dubh泰nudfh克ezviu新kb闻tgkp网zwz版权所有,请勿未授权转载!!!

BaseAction.class.php

虎po_rl泰mqqfa克tbeup新zcvx闻omwrx网n版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎sejuk泰lci克gr新q_闻nsan网erea版权所有,请勿未授权转载!!!

    public function _initialize(){

虎ytp_泰i克c新beipf闻s网ljum版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎crdh泰luooc克fmf新m_qm闻wpn网cizhd版权所有,请勿未授权转载!!!

    }

虎xwes泰t克y新vfuxx闻ffde网wpki版权所有,请勿未授权转载!!!

}

虎luf泰_rn克z新g_x闻zfauz网wmpx版权所有,请勿未授权转载!!!


虎wjr泰l克ovf新uwhbx闻ytajw网zng版权所有,请勿未授权转载!!!

IndexAction.class.php

虎mx泰u克g新r_r闻she网cty版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎ru泰dfj克chp新xop闻qxpxo网np版权所有,请勿未授权转载!!!

    public function (){

虎bsd泰ksqrm克nudn新y_闻u网p版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎yexhq泰iu_克rbv新uj闻id网x版权所有,请勿未授权转载!!!

    }

虎taqs泰mdmvm克qeg新fwob闻cab网fpk版权所有,请勿未授权转载!!!

}

虎mnne泰jxg克xy新nmqt闻m网qi版权所有,请勿未授权转载!!!


虎yux_s泰xb克dr_m新kgcz闻ofyu_网pphl版权所有,请勿未授权转载!!!

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

虎x泰cih克irkg新q闻bnog网duoi版权所有,请勿未授权转载!!!

baseActionindexAcition

虎cyxct泰vy克pt新oefhl闻dj网xuj版权所有,请勿未授权转载!!!


虎d泰zztp克wr新dcodb闻x网th版权所有,请勿未授权转载!!!

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

虎hx泰sor克ttlmt新bt闻pvc网yk版权所有,请勿未授权转载!!!

 

虎mgye泰f克agwg新io_ew闻wb网v版权所有,请勿未授权转载!!!

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

虎xtzhv泰s克ueat新cg闻_ht网jw版权所有,请勿未授权转载!!!




заявление: все рукописи и диаграммы, которые перевернулись, для того, чтобы получить больше информации и удобного изучения, не означают, что станция и организатор, организатор и спонсор согласны с их взглядами или подтверждают их подлинность, содержание статьи только для справки, если нарушение прав автора обратитесь к администратору сайта.

Спасибо за комментарий!

Список комментариев

    Пока нет данных