虎泰克博客

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


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

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

虎pf泰wqwvt克tmdfc新k闻rkt网dtujp版权所有,请勿未授权转载!!!

 

虎_wtxa泰lgatu克lb新qprg闻m网gu版权所有,请勿未授权转载!!!

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

虎n泰x克x_x新q_ke闻kpowv网uqy版权所有,请勿未授权转载!!!

 

虎z泰ksk克gcj新gtp闻xni网xv版权所有,请勿未授权转载!!!

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

虎fpf泰wky克o新ekd闻pmy网p版权所有,请勿未授权转载!!!

 

虎xnch泰cthp克gown新onkes闻ppu网esvh版权所有,请勿未授权转载!!!

a.php

虎xwloz泰rgwqw克jz新p闻fjmxq网alsjw版权所有,请勿未授权转载!!!

class a{

虎msxep泰_l克lsyqn新gh闻vx网frj版权所有,请勿未授权转载!!!

    function __construct(){

虎avl泰cyn克et新na闻e网qe版权所有,请勿未授权转载!!!

        echo 'a';

虎j泰_mlew克mxvn新dtnew闻mze网fm_版权所有,请勿未授权转载!!!

    }

虎vv泰ujkz克ng新pb闻d网ha_t_版权所有,请勿未授权转载!!!

}

虎rjq泰xmyqg克a新wc闻hhgm网qgdf版权所有,请勿未授权转载!!!

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

虎n泰hiugt克nryj新bqi闻cdt网wfgn版权所有,请勿未授权转载!!!

include 'a.php';

虎tmga泰mdgip克zqauo新n闻f网grvyu版权所有,请勿未授权转载!!!

class b extends a{

虎okns泰rqi克zcv新igimz闻cndnx网jkyjr版权所有,请勿未授权转载!!!

    function __construct(){

虎y泰gfpt克amzx新su闻_bw网evsqt版权所有,请勿未授权转载!!!

        echo 'b';

虎psz泰wuz克hqh新amg闻zka网vb版权所有,请勿未授权转载!!!

    }

虎o泰fa克amolv新p闻dg网o版权所有,请勿未授权转载!!!

}

虎y泰h克ayk新y闻je网bsdj_版权所有,请勿未授权转载!!!

 

虎vu泰b克lnwvd新w闻vpz网kw版权所有,请勿未授权转载!!!

$test=new b();

虎iswy泰ichm克j新zwb闻ipv网idewf版权所有,请勿未授权转载!!!

运行结果:

虎l泰zneg克t新iaei闻dlxwd网xiesj版权所有,请勿未授权转载!!!

b

虎pfxta泰ba克fxs新qosov闻ipgyl网wv版权所有,请勿未授权转载!!!


虎djinv泰dpo克uobm新l闻u网crv版权所有,请勿未授权转载!!!

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

虎idrkl泰fkod克fojn新mmgib闻tbbxa网yxur版权所有,请勿未授权转载!!!

 

虎a泰fw_克izmwm新z_rhs闻f_f网ogn版权所有,请勿未授权转载!!!

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

虎fcu泰gikq克j新vymbc闻s网o版权所有,请勿未授权转载!!!

include 'a.php';

虎mb泰xfc克cnlr新jzhvj闻ivt网oiy版权所有,请勿未授权转载!!!

class b extends a{

虎g泰chypv克bk新y_tp闻l网eo版权所有,请勿未授权转载!!!

    function __construct(){

虎tjzd泰gyr克_p新yk闻acpg网gno版权所有,请勿未授权转载!!!

        parent::__construct();

虎kzv泰qo克os新i闻h_ju网lk版权所有,请勿未授权转载!!!

        echo 'b';

虎dph泰gnyls克bkv新ssowa闻pngb网r版权所有,请勿未授权转载!!!

    }

虎xgrff泰qyp克cueq新qr闻dzxyl网w版权所有,请勿未授权转载!!!

}

虎s泰cde克zexgu新ubmx闻ua_网z版权所有,请勿未授权转载!!!

 

虎n泰seg克za新afn闻kv网nen版权所有,请勿未授权转载!!!

$test=new b();

虎dremy泰aj克zno新gpm闻lpz网lbyt版权所有,请勿未授权转载!!!

那么输出结果是:

虎wjfza泰ewa克zx新sdw闻rpq网jdxme版权所有,请勿未授权转载!!!

ab

虎kbt泰e克zhh新gvy闻a网w版权所有,请勿未授权转载!!!


虎_fizo泰nghs_克eqa新en闻ewqxv网kxdg版权所有,请勿未授权转载!!!

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

虎a_sms泰kqs克vp新fd闻cqp网xvw版权所有,请勿未授权转载!!!

 

虎p泰o克z新ef闻m网w_ra版权所有,请勿未授权转载!!!

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

虎mu泰v克ac新tnvc闻w网myoxm版权所有,请勿未授权转载!!!

 

虎aej泰ea克ds新n闻d_elf网l版权所有,请勿未授权转载!!!

BaseAction.class.php

虎xjqi泰knn克ybbxr新hc闻t网cmw版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎xz泰nk克qytdm新nlwsi闻vivqe网dbgpo版权所有,请勿未授权转载!!!

    public function _initialize(){

虎wkoc泰vvt克c_新mpeoh闻zupb网dw版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎oxa_j泰qg克by新sq闻h网jj_c版权所有,请勿未授权转载!!!

    }

虎q泰ldh克dk新jawan闻ti网hwl版权所有,请勿未授权转载!!!

}

虎tp泰l克nylwj新wnfg闻da网pqgi_版权所有,请勿未授权转载!!!


虎zzt泰lyh克v新fh闻a网yo版权所有,请勿未授权转载!!!

IndexAction.class.php

虎xuj泰les克ksu新miym闻o网uvme版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎t泰dlqn克c新t闻fzs网ykh版权所有,请勿未授权转载!!!

    public function (){

虎otqrb泰trd克cxxys新rwx闻af网muhyi版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎ibgb泰_m克ux新ojma闻hze网uw版权所有,请勿未授权转载!!!

    }

虎vszw泰tbu克efboj新zs闻avpl网qjs版权所有,请勿未授权转载!!!

}

虎nuk泰z_l_克vf_q新hdvmr闻jw_nw网am版权所有,请勿未授权转载!!!


虎gj泰eak克oov新vn闻k网j版权所有,请勿未授权转载!!!

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

虎z_x泰vp克_xp新hxwis闻fdrk网iaiye版权所有,请勿未授权转载!!!

baseActionindexAcition

虎_o泰oqtkn克rkdj新htrhp闻i网vdt_h版权所有,请勿未授权转载!!!


虎w泰f克mfzde新wn闻mgjk网d版权所有,请勿未授权转载!!!

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

虎qj泰ypaxr克ok新_ik闻dk网zygh版权所有,请勿未授权转载!!!

 

虎jg泰l克t新__z闻_网din版权所有,请勿未授权转载!!!

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

虎lw泰ieend克lgoa新k闻rlvr网oi版权所有,请勿未授权转载!!!




Verklaring: alle artikelen /tekeningen die op deze website worden weergegeven, zijn bedoeld om meer informatie te verzenden en de discussie te vergemakkelijken, wat niet betekent dat de website, de host en de organisator het eens zijn met hun meningen of de authenticiteit van hun inhoud bevestigen. De inhoud van de artikelen is alleen voor referentie. Indien de rechten van de oorspronkelijke auteur worden geschonden, neem dan contact op met de beheerder van de website.

Schrijf in om commentaar te geven

Lijst van opmerkingen

    Geen gegevens