虎泰克博客

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


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

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

虎pnkv泰gcvew克n新pxo闻jqfck网oz版权所有,请勿未授权转载!!!

 

虎pliv泰ti克kvig新qhv闻vg网hn版权所有,请勿未授权转载!!!

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

虎e泰osazs克ct新qbdbr闻cjg网c_ebw版权所有,请勿未授权转载!!!

 

虎zezy泰tuk克xwr新pga闻zny网vfab版权所有,请勿未授权转载!!!

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

虎z_泰oun克hf新hwq闻mxspn网yxb版权所有,请勿未授权转载!!!

 

虎e泰pm_n克kzgtk新micbn闻_q网ozcgu版权所有,请勿未授权转载!!!

a.php

虎a泰gi克cch新llbwc闻dl网bw_xa版权所有,请勿未授权转载!!!

class a{

虎guis泰ab克xvs新fsmqi闻vg网lh版权所有,请勿未授权转载!!!

    function __construct(){

虎k泰z克t新zm闻cldsk网ptz版权所有,请勿未授权转载!!!

        echo 'a';

虎bbdb泰_jc克ptkus新g_ig闻sd网j版权所有,请勿未授权转载!!!

    }

虎qj泰_l克o新bz闻yfw网nnmh版权所有,请勿未授权转载!!!

}

虎hu泰u克l新zn闻rg网rvu版权所有,请勿未授权转载!!!

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

虎xvgur泰zgep克g新bvzh闻nme网vpatc版权所有,请勿未授权转载!!!

include 'a.php';

虎rj泰hul克nhnly新kmad闻so网fjh版权所有,请勿未授权转载!!!

class b extends a{

虎llum泰rfo克yfv新wkmc闻wfa网t版权所有,请勿未授权转载!!!

    function __construct(){

虎cnedr泰_gjd克hb新kfzs闻uahb网p版权所有,请勿未授权转载!!!

        echo 'b';

虎r泰qimx克tnty新wzia闻vgzon网ienne版权所有,请勿未授权转载!!!

    }

虎uokru泰d克kpd新wyi闻nq网k_版权所有,请勿未授权转载!!!

}

虎yun泰iet克kjfx新w闻u网tctoj版权所有,请勿未授权转载!!!

 

虎ijaa泰f克devlh新mvvn闻tqzra网rgkrq版权所有,请勿未授权转载!!!

$test=new b();

虎nvf_泰wi克xdp新n_bdm闻s网bpfbx版权所有,请勿未授权转载!!!

运行结果:

虎nmcmo泰fmq克aweet新hrwp闻hrd网f版权所有,请勿未授权转载!!!

b

虎swhw泰_克enwzi新gcok闻jwulz网k版权所有,请勿未授权转载!!!


虎rpr泰mcmv克t_新vzxgs闻qej网rlh版权所有,请勿未授权转载!!!

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

虎wb泰ucd克johy新vhi_闻br网vzmlp版权所有,请勿未授权转载!!!

 

虎ipai泰fdo克nep新_闻avcea网udpq版权所有,请勿未授权转载!!!

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

虎vzii泰toeqv克uye新gi闻py网imna版权所有,请勿未授权转载!!!

include 'a.php';

虎p_or泰qei克_rpo新ebmxj闻m网eugy版权所有,请勿未授权转载!!!

class b extends a{

虎jhplp泰ing克gzlz新q闻pl网wyee版权所有,请勿未授权转载!!!

    function __construct(){

虎vwlm泰_ly_h克i新th闻asnx网d版权所有,请勿未授权转载!!!

        parent::__construct();

虎xwe泰vgk克vecxi新gl闻whg网icgm版权所有,请勿未授权转载!!!

        echo 'b';

虎pzbl泰gsqh克nf新jiqm闻jmdn网yur版权所有,请勿未授权转载!!!

    }

虎fwzsg泰ca克zbw新ufh闻mw_网mbbqw版权所有,请勿未授权转载!!!

}

虎cy泰apv克vj新li闻fm_h网e版权所有,请勿未授权转载!!!

 

虎un泰gehh克tv_j新j闻ryl网e_版权所有,请勿未授权转载!!!

$test=new b();

虎a泰dolin克ach新jk闻toy网jw版权所有,请勿未授权转载!!!

那么输出结果是:

虎pwft泰mds克twxcz新ybcw闻qsx网pqg版权所有,请勿未授权转载!!!

ab

虎orp泰bupb克yzclz新_zi闻ei网bfq版权所有,请勿未授权转载!!!


虎lyi_泰j克ig新lp闻bj网vgom版权所有,请勿未授权转载!!!

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

虎s泰him克q新uht闻ik网b_czs版权所有,请勿未授权转载!!!

 

虎pdj泰g克jp新uk闻micdx网i版权所有,请勿未授权转载!!!

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

虎lelyv泰erekh克ond新u闻b网ni_oh版权所有,请勿未授权转载!!!

 

虎w泰gz克tk新jve闻md网x版权所有,请勿未授权转载!!!

BaseAction.class.php

虎lapk泰uho克dh新rorla闻c网f版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎raxo泰td克gcvk新l闻rupk网wvdpr版权所有,请勿未授权转载!!!

    public function _initialize(){

虎l泰rsb克vmox新vx闻ea网rbvvw版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎gamhd泰_bn克b新hh闻adbu网vc版权所有,请勿未授权转载!!!

    }

虎i泰r克o新aehf闻guuk网kyth版权所有,请勿未授权转载!!!

}

虎kdaf泰lf克csp新diz闻v_v_x网fnf版权所有,请勿未授权转载!!!


虎n泰lay克l新rmsht闻rorsw网ynq版权所有,请勿未授权转载!!!

IndexAction.class.php

虎he泰w克c新g闻dekn网ri版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎tjj泰t克an新ng闻v网ai版权所有,请勿未授权转载!!!

    public function (){

虎iq泰owjr克dlojk新b闻dcndz网zl版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎g泰gg克ri新_oebe闻n网pfes版权所有,请勿未授权转载!!!

    }

虎aqm_泰kigz克bqa新prod闻twgjm网fjpbg版权所有,请勿未授权转载!!!

}

虎zkn泰zs_克dp新dy闻iez网khg版权所有,请勿未授权转载!!!


虎gox泰rd克dc新j_q闻wh网vt版权所有,请勿未授权转载!!!

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

虎rem泰xhys克pw新r闻tyr网tv版权所有,请勿未授权转载!!!

baseActionindexAcition

虎sdof_泰xi克msnj新bo闻glc网v版权所有,请勿未授权转载!!!


虎tv泰uj_y克olh新yjra闻xo网jaeyp版权所有,请勿未授权转载!!!

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

虎he泰x克gn新vyvg闻sux网z版权所有,请勿未授权转载!!!

 

虎lh泰fff克zuk新z闻xsxih网ytnfb版权所有,请勿未授权转载!!!

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

虎ab_i泰lf克w新t闻u_网c版权所有,请勿未授权转载!!!




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

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

コメントリスト

    データがありません