虎泰克博客

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


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

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

虎lnnsb泰_a_hr克c新tv闻fdysf网yuo版权所有,请勿未授权转载!!!

 

虎ybsu泰zjvv克sxay新hq闻_g网y版权所有,请勿未授权转载!!!

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

虎zxwxh泰rf克_ipy新_ek闻xej网ca版权所有,请勿未授权转载!!!

 

虎zyaf泰yv_h克rz新killn闻iy网y版权所有,请勿未授权转载!!!

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

虎h泰bbyy克avzf新kc闻eaigl网l版权所有,请勿未授权转载!!!

 

虎hai泰k克u新urd闻hodlf网unfbf版权所有,请勿未授权转载!!!

a.php

虎egti泰gbe克j新yyi闻c网vw版权所有,请勿未授权转载!!!

class a{

虎ctja泰ay克hiq新dko闻tpsn网cubpr版权所有,请勿未授权转载!!!

    function __construct(){

虎owbs泰hy克i新buyr闻rmzzp网xi版权所有,请勿未授权转载!!!

        echo 'a';

虎lpou泰sj克cl新fowpz闻ig网otg版权所有,请勿未授权转载!!!

    }

虎r泰owaan克rfjvf新e闻v网waeuj版权所有,请勿未授权转载!!!

}

虎veco泰ryaqz克nov新chhy闻h网n_版权所有,请勿未授权转载!!!

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

虎w泰z克ft新ey闻nxaa网lb版权所有,请勿未授权转载!!!

include 'a.php';

虎wn泰h克p_ya新sa闻ojl网ix版权所有,请勿未授权转载!!!

class b extends a{

虎sy泰ygbc克unf新nkd闻yhmk网gjhtw版权所有,请勿未授权转载!!!

    function __construct(){

虎bas泰p_ta克bm_新byqc闻qml网l版权所有,请勿未授权转载!!!

        echo 'b';

虎zjrn泰kkw克oj新gwve闻ihj网_a版权所有,请勿未授权转载!!!

    }

虎of泰m克y新_m闻xiha网gxnnr版权所有,请勿未授权转载!!!

}

虎gy泰cm克hxc新tofte闻no网pzd版权所有,请勿未授权转载!!!

 

虎ylcj泰bmwy_克xkbqf新iegt闻g网biey版权所有,请勿未授权转载!!!

$test=new b();

虎e泰lavhj克wvh新pf闻wyt网l版权所有,请勿未授权转载!!!

运行结果:

虎gdrqr泰q克y_新jijq闻dpwfi网utbuc版权所有,请勿未授权转载!!!

b

虎wu泰tev克jizbu新gpwa闻tkhr_网hcx版权所有,请勿未授权转载!!!


虎j泰sdqn克sxha新q闻uty网lp版权所有,请勿未授权转载!!!

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

虎vg泰u_fwy克bc_新_bbg闻j网k版权所有,请勿未授权转载!!!

 

虎a泰muhdo克qrvt新kgwl闻pj网rn_m版权所有,请勿未授权转载!!!

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

虎m_rbe泰lxqwn克aha新wuaur闻j网lt版权所有,请勿未授权转载!!!

include 'a.php';

虎z泰ke克hc新a闻zn网bllv版权所有,请勿未授权转载!!!

class b extends a{

虎r泰onor克wxihp新zor闻tgjdn网bai版权所有,请勿未授权转载!!!

    function __construct(){

虎ic_l泰hhwyo克md新ronn闻gmi网bbu版权所有,请勿未授权转载!!!

        parent::__construct();

虎n泰emd克ezym新b闻cd网unei版权所有,请勿未授权转载!!!

        echo 'b';

虎jwoiy泰nnggt克tqcsd新qc闻cq网a版权所有,请勿未授权转载!!!

    }

虎u泰i克tfwm新yioi闻pvadr网o版权所有,请勿未授权转载!!!

}

虎yvys泰vdu克ehie新wjm闻t网b版权所有,请勿未授权转载!!!

 

虎txd泰oae克t新oav闻suuzz网zcvwn版权所有,请勿未授权转载!!!

$test=new b();

虎ld泰crsc克y新bosb闻zqfa网_k版权所有,请勿未授权转载!!!

那么输出结果是:

虎qu泰xtf克ldjyi新mlm闻yoibd网lc_g版权所有,请勿未授权转载!!!

ab

虎gb泰ksbv克q新njrid闻wsl网nmbw版权所有,请勿未授权转载!!!


虎p泰cv克aphra新i闻bbfe网sbvh版权所有,请勿未授权转载!!!

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

虎vzqb泰jw克mcyzq新elq闻lynap网txjfd版权所有,请勿未授权转载!!!

 

虎ur泰cpgn克jiw新ezbym闻_网zji版权所有,请勿未授权转载!!!

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

虎fh_a泰yaqx克fhs新icu闻ps网sjw版权所有,请勿未授权转载!!!

 

虎x_m泰wzf克ylorx新cyjj闻zaa网_版权所有,请勿未授权转载!!!

BaseAction.class.php

虎q泰x克u新yeu_闻gkokr网u版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎vhml泰neyl克lq_fw新t闻mzl网var版权所有,请勿未授权转载!!!

    public function _initialize(){

虎wqau泰ad_r克opg新d_闻q网d版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎vs泰pgjs克aixsz新l闻tvio网zla版权所有,请勿未授权转载!!!

    }

虎ucgvn泰ijus克kqig新afuqh闻tgsk网j版权所有,请勿未授权转载!!!

}

虎o泰t克yrta_新aht_j闻w网rk版权所有,请勿未授权转载!!!


虎pdtdw泰t克rsvr新unw闻pr网t版权所有,请勿未授权转载!!!

IndexAction.class.php

虎azn泰dp克ywbm新g闻cfrau网wkjth版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎wvrzu泰v克h新g_lv闻f_网becje版权所有,请勿未授权转载!!!

    public function (){

虎tvu泰hgra克cj新w闻rax网z版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎n泰lopdj克he_新zdt闻r_d网z_版权所有,请勿未授权转载!!!

    }

虎t_hh泰m克cs新j_lne闻vgfpp网wyp版权所有,请勿未授权转载!!!

}

虎ikhq泰ldf克ibi新l_xm闻idjxt网k版权所有,请勿未授权转载!!!


虎slhb泰hezlf克g新tqm闻you网iv版权所有,请勿未授权转载!!!

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

虎zjggh泰v_克mnk新pu闻ax网f版权所有,请勿未授权转载!!!

baseActionindexAcition

虎secam泰w克mi新q闻z网cgoei版权所有,请勿未授权转载!!!


虎yyxld泰ugbn克old新guaq闻orrc_网f_b版权所有,请勿未授权转载!!!

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

虎zakq泰kejcb克yue新wjcja闻mm网nzh版权所有,请勿未授权转载!!!

 

虎jdg泰wpsaf克fp新um闻dnqgn网grbkr版权所有,请勿未授权转载!!!

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

虎uj泰lgrtj克nr新wfqp闻_网urdaq版权所有,请勿未授权转载!!!




Dichiarazione: tutti gli articoli / disegni riprodotti su questo sito web hanno lo scopo di trasmettere più informazioni e facilitare la discussione, il che non significa che il sito web, l'host e l'organizzatore siano d'accordo con le loro opinioni o confermino l'autenticità dei loro contenuti. I contenuti degli articoli sono di riferimento. Se i diritti dell'autore originale sono violati, si prega di contattare l'amministratore del sito web.

Firma per commentare

Commento elenco

    Nessun dato