虎泰克博客

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


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

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

虎way泰qgho克kg新n闻_网kzgd版权所有,请勿未授权转载!!!

 

虎m_泰em克fmqzf新ibqiw闻aisya网x_d版权所有,请勿未授权转载!!!

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

虎_泰jbv克jhe新ec_c闻thbi网q版权所有,请勿未授权转载!!!

 

虎qsg泰jaj__克y新szeft闻u网bc版权所有,请勿未授权转载!!!

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

虎vq泰n克dy新y_ki闻mrsy网b版权所有,请勿未授权转载!!!

 

虎smc泰y克unpq新m闻hf_we网a版权所有,请勿未授权转载!!!

a.php

虎rsf泰_xxvu克dhlju新owbje闻vo网cf版权所有,请勿未授权转载!!!

class a{

虎ch泰jme克o新deoy闻dm网mbuy版权所有,请勿未授权转载!!!

    function __construct(){

虎ulcn泰wghk克vq新thy闻dahk网e版权所有,请勿未授权转载!!!

        echo 'a';

虎z泰b克zh新nwv闻nmaq网aqn版权所有,请勿未授权转载!!!

    }

虎szmmy泰xfb克lith新gjea闻y网szg版权所有,请勿未授权转载!!!

}

虎m泰k克lkksb新hqnw闻g网skkxv版权所有,请勿未授权转载!!!

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

虎ga泰hbt克sdyg新nrhq闻mdel网v版权所有,请勿未授权转载!!!

include 'a.php';

虎onf泰hviah克kzry新jz闻dnhz网ayy版权所有,请勿未授权转载!!!

class b extends a{

虎snolr泰aqlnn克mi新r闻q网llu版权所有,请勿未授权转载!!!

    function __construct(){

虎xkm泰r克crxgc新_闻hecgs网esa版权所有,请勿未授权转载!!!

        echo 'b';

虎ol泰neb克fzpgj新fepvo闻xicw网yex版权所有,请勿未授权转载!!!

    }

虎gplq泰p克nwfuv新stvkf闻xw网koony版权所有,请勿未授权转载!!!

}

虎cd泰pmx克mfw新eun_闻jp网r版权所有,请勿未授权转载!!!

 

虎bcqp泰vb克hvv新lu闻fbru网bsubv版权所有,请勿未授权转载!!!

$test=new b();

虎u泰dltr克_dk__新w闻a网aaj版权所有,请勿未授权转载!!!

运行结果:

虎isdg泰zvy_m克jg新au_闻s网xyexk版权所有,请勿未授权转载!!!

b

虎ug泰qqei克d新wbe闻fuc网y版权所有,请勿未授权转载!!!


虎pqdmk泰ymvu克_d新thok闻bvs网xcwev版权所有,请勿未授权转载!!!

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

虎olz泰vjepn克zt新nszw闻lada网bf_i版权所有,请勿未授权转载!!!

 

虎nqf泰iyfkz克usi新wxj闻kecz网etgi版权所有,请勿未授权转载!!!

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

虎w泰yznf克_新r闻zc网c版权所有,请勿未授权转载!!!

include 'a.php';

虎gfim泰svw克_vjjo新r闻c网u版权所有,请勿未授权转载!!!

class b extends a{

虎n泰r克oqjeb新i闻hlrl网n版权所有,请勿未授权转载!!!

    function __construct(){

虎iq泰vi克xhnv新yqexq闻exow网rz版权所有,请勿未授权转载!!!

        parent::__construct();

虎tiup泰frh克wj新bvri闻m网ow版权所有,请勿未授权转载!!!

        echo 'b';

虎aai泰wouz克j新zrii闻csr网v版权所有,请勿未授权转载!!!

    }

虎pbls泰c克fz新db闻a网vzaeh版权所有,请勿未授权转载!!!

}

虎nodr泰ny克eb新ca闻hl网_w版权所有,请勿未授权转载!!!

 

虎bif泰_czi克su新mcytw闻fn网n版权所有,请勿未授权转载!!!

$test=new b();

虎_a泰cybr克e新rusn闻cwo网mku版权所有,请勿未授权转载!!!

那么输出结果是:

虎venf泰boas克ysn新hyva闻ipaaw网azgt版权所有,请勿未授权转载!!!

ab

虎teume泰uth克ju新aem闻er网p版权所有,请勿未授权转载!!!


虎se泰br克lzn新pbr闻crzbt网fgo版权所有,请勿未授权转载!!!

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

虎mnwvb泰wy克wp新e_gv闻bp网a版权所有,请勿未授权转载!!!

 

虎aj泰ja克lxnn新jihal闻xo网mk版权所有,请勿未授权转载!!!

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

虎d泰bmfd克iow新x_ca闻aktv网wlwqd版权所有,请勿未授权转载!!!

 

虎ndwp_泰gbin克nis新pl_nq闻ijbj网vhz_h版权所有,请勿未授权转载!!!

BaseAction.class.php

虎f泰z克d新lyfc闻v网rsnxc版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎slg泰hzzmd克gp新fapq闻ye网fm版权所有,请勿未授权转载!!!

    public function _initialize(){

虎mxyj泰vkdqd克waxi新wac闻pzgj网p版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎iavk泰lftj克k_igw新blkb闻_rzh网bvp版权所有,请勿未授权转载!!!

    }

虎pxnl泰qcmj克kaorz新fo闻_网bfk版权所有,请勿未授权转载!!!

}

虎iwne泰iqz克pl新w闻r网avemu版权所有,请勿未授权转载!!!


虎ekrtf泰hbpvb克mltos新sazpv闻pqap网vnjr版权所有,请勿未授权转载!!!

IndexAction.class.php

虎wp泰e克okrm新ltwu_闻qn网xxsm版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎nnfxp泰h克_ubyc新eqpfx闻_wo网ldgu版权所有,请勿未授权转载!!!

    public function (){

虎g泰vl克ahdl新wdsoy闻chx网o_版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎rsv泰whqqg克_lgvx新isy闻qv网xjzzk版权所有,请勿未授权转载!!!

    }

虎k泰sg克hmyb新tqe闻wxlsd网ahhit版权所有,请勿未授权转载!!!

}

虎b泰j克mw新_fw闻rt_rv网hves版权所有,请勿未授权转载!!!


虎_pipc泰e克y新o闻d网fohmw版权所有,请勿未授权转载!!!

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

虎zvr泰mv_dd克tzub_新d闻ubk网di版权所有,请勿未授权转载!!!

baseActionindexAcition

虎crmf泰hdo克xlt新z闻ww网usi版权所有,请勿未授权转载!!!


虎nvgs泰kujoh克jc新jpui闻_yrh网r版权所有,请勿未授权转载!!!

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

虎r泰aoqh克boqpp新vrrg闻foyjx网sm版权所有,请勿未授权转载!!!

 

虎wg_j泰q_克pr新vbiuc闻ccco网s版权所有,请勿未授权转载!!!

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

虎jb泰ynf克v新kvj_闻co网vtslv版权所有,请勿未授权转载!!!




Oświadczenie: wszystkie artykuły / rysunki zamieszczone na tej stronie mają na celu przekazywanie więcej informacji i ułatwienie dyskusji, co nie oznacza, że strona internetowa, gospodarz i organizator zgadzają się z ich opiniami lub potwierdzają autentyczność ich treści. Zawartość tych artykułów jest tylko do odwołania. W przypadku naruszenia praw pierwotnego autora prosimy o kontakt z administratorem strony internetowej.

Wpisz się do komentarza

Lista komentarzy

    Brak danych