虎泰克博客

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


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

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

虎_w泰k克_lnz新hkshu闻hr_q网igp版权所有,请勿未授权转载!!!

 

虎tgmav泰rgvak克hkz_新wkd闻igytx网r版权所有,请勿未授权转载!!!

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

虎bs泰uvdl克dz新dbza闻qbgwf网ccat版权所有,请勿未授权转载!!!

 

虎gj泰u_n克u新uzxfd闻y网mwmcw版权所有,请勿未授权转载!!!

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

虎zow泰umrm克x新ol闻vbtr网y版权所有,请勿未授权转载!!!

 

虎vsp泰fx_w克ked新jjtou闻yd网ryo版权所有,请勿未授权转载!!!

a.php

虎kg泰pxz克crx新bsfj闻vmzu网amtj版权所有,请勿未授权转载!!!

class a{

虎mf泰wqwx克cvu新_g闻xbwq网egx版权所有,请勿未授权转载!!!

    function __construct(){

虎qvvej泰vvixs克xen_s新jm闻b网su_版权所有,请勿未授权转载!!!

        echo 'a';

虎rmnf泰nnk克q新v闻mn网ktpz版权所有,请勿未授权转载!!!

    }

虎miqc泰esj克msh新cf闻ha网fu版权所有,请勿未授权转载!!!

}

虎hjxm泰obr克j新dvp闻yybk_网zqjbe版权所有,请勿未授权转载!!!

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

虎bvcg泰cixsz克yom新rbp闻zb网lnzni版权所有,请勿未授权转载!!!

include 'a.php';

虎rwhsb泰wyh克bl新xcdf闻myxo网gilo版权所有,请勿未授权转载!!!

class b extends a{

虎e泰sb克g新zi闻hc_网i版权所有,请勿未授权转载!!!

    function __construct(){

虎d泰wpb克fm新npe闻agpja网_版权所有,请勿未授权转载!!!

        echo 'b';

虎wkqmg泰lpykf克wo新aesd闻cs网lyzw版权所有,请勿未授权转载!!!

    }

虎s_泰_w克ch新fdd闻izsmw网s版权所有,请勿未授权转载!!!

}

虎jsudl泰eajr克sk新_cbhm闻qb网gdk版权所有,请勿未授权转载!!!

 

虎jtthb泰sep克_wwq新jb_闻ai网ob版权所有,请勿未授权转载!!!

$test=new b();

虎lmloq泰rgji克ihqyo新lpoz闻omhia网oyhd版权所有,请勿未授权转载!!!

运行结果:

虎uwf泰gxeg克t新dsa闻rmvz网qjpw版权所有,请勿未授权转载!!!

b

虎x泰_pyp克vgl新usnga闻eoulg网aa版权所有,请勿未授权转载!!!


虎yv_oy泰faxdc克y新jle闻x网el版权所有,请勿未授权转载!!!

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

虎xhyfx泰cjqo克mt_h新seh闻mvli网vy版权所有,请勿未授权转载!!!

 

虎zvkqw泰vhbsg克j新vu闻gr网jazyt版权所有,请勿未授权转载!!!

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

虎olah泰oeq克hrkeu新hjeb闻fmqq网_版权所有,请勿未授权转载!!!

include 'a.php';

虎m泰gjh克kxb新jh闻mdxoj网e版权所有,请勿未授权转载!!!

class b extends a{

虎z泰jz克ldg新m闻mbcz网ahp版权所有,请勿未授权转载!!!

    function __construct(){

虎rl泰a克tl新a闻bp网mjdh版权所有,请勿未授权转载!!!

        parent::__construct();

虎hbiyh泰r克kvmq新a闻f网h版权所有,请勿未授权转载!!!

        echo 'b';

虎gu泰q克xqxo新a闻vb网w版权所有,请勿未授权转载!!!

    }

虎l泰trqcx克l新jlvij闻ssbff网la版权所有,请勿未授权转载!!!

}

虎hwhmq泰jkpzx克pu新f闻mnwky网fp版权所有,请勿未授权转载!!!

 

虎lebeo泰egz克lj_新v闻jgn网l版权所有,请勿未授权转载!!!

$test=new b();

虎ngd泰e克bxvm新w闻s网gajcw版权所有,请勿未授权转载!!!

那么输出结果是:

虎f泰_克pkgj新lunkc闻znktq网wf版权所有,请勿未授权转载!!!

ab

虎mknio泰_qcf克pfab新kqv闻vodsw网pp版权所有,请勿未授权转载!!!


虎cum泰ak克qa新_闻yna网x版权所有,请勿未授权转载!!!

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

虎tp泰oml克ens新nkfpf闻nj网jt版权所有,请勿未授权转载!!!

 

虎ckw泰wl克n新vcv闻xnjl网pjdq版权所有,请勿未授权转载!!!

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

虎s泰ls克ubbii新u闻_b网i_版权所有,请勿未授权转载!!!

 

虎ba泰u克y新isrd闻md网rntxt版权所有,请勿未授权转载!!!

BaseAction.class.php

虎xin泰zafg克y新k闻jl网uql_z版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎qndtw泰qer克dvl新fhycw闻hm网wyjch版权所有,请勿未授权转载!!!

    public function _initialize(){

虎l泰smv克vlyjw新awm闻kk网xlcwv版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎rete泰vq克agjo新kc闻fvlpg网cf版权所有,请勿未授权转载!!!

    }

虎dk泰t克ji新g闻pfm网ss版权所有,请勿未授权转载!!!

}

虎yv泰z克oy新w闻ttzo网lkl版权所有,请勿未授权转载!!!


虎q泰jqwl克jif新eujp闻ufx网s版权所有,请勿未授权转载!!!

IndexAction.class.php

虎t_miu泰yl克nen新hq闻ai网br版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎je泰vj克ql新bk闻tuj网tasn版权所有,请勿未授权转载!!!

    public function (){

虎g泰stunz克evqi新chu闻e网wwnd版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎zxjb泰v克vwx新l闻nxjym网da_d版权所有,请勿未授权转载!!!

    }

虎mnie泰drw克sj新stvt闻p网cabl版权所有,请勿未授权转载!!!

}

虎akuvt泰wqvg克temrc新_fvbr闻msgs网v版权所有,请勿未授权转载!!!


虎oxt泰fduzf克cvuqk新qilm闻ew网zbdvw版权所有,请勿未授权转载!!!

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

虎nzffj泰imigl克h_pwc新woada闻_li网joi版权所有,请勿未授权转载!!!

baseActionindexAcition

虎nwrv泰vimqe克aavq新wqoo闻g网o版权所有,请勿未授权转载!!!


虎xlcp泰yq克d新vnnla闻lu网hmz版权所有,请勿未授权转载!!!

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

虎c泰g克bcd新j闻ui网lx版权所有,请勿未授权转载!!!

 

虎r泰iw克dchhd新khli闻ljamz网fijsl版权所有,请勿未授权转载!!!

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

虎peqwl泰f克xm新kt闻f网e版权所有,请勿未授权转载!!!




聲明:凡本網轉載的文/圖等稿件,均出於傳遞更多資訊及方便探討之目的,並不意味著本站及主辦、承辦單位贊同其觀點或證實其內容的真實性,文章內容僅供參考,如果侵犯了原作者的權利請與網站管理員聯系。

登入以發表評論

評論清單

    暫無數據