虎泰克博客

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


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

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

虎er泰fszb克wmb新cwqk闻ualnv网j版权所有,请勿未授权转载!!!

 

虎bcy泰dl克lv新ish闻ytiws网hnubh版权所有,请勿未授权转载!!!

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

虎qhx泰c克xs新tsp闻s网eetpt版权所有,请勿未授权转载!!!

 

虎agzii泰u克psb_新de闻v_fxn网wxaf版权所有,请勿未授权转载!!!

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

虎_z泰_d_克vgnrq新ogd闻h_qym网lbbm版权所有,请勿未授权转载!!!

 

虎boc泰l克ayrdq新obdn闻o网l版权所有,请勿未授权转载!!!

a.php

虎kgrac泰_h克vst_f新ixrbu闻nbya网t版权所有,请勿未授权转载!!!

class a{

虎eoyho泰wdkvf克rbs新l闻sqpg网gkm版权所有,请勿未授权转载!!!

    function __construct(){

虎qzl泰azp克w新vz闻uyvde网gj版权所有,请勿未授权转载!!!

        echo 'a';

虎gqhk泰d克ntx新gc闻z网iyvtp版权所有,请勿未授权转载!!!

    }

虎ug泰svq克yyp新j闻ijys网ojib_版权所有,请勿未授权转载!!!

}

虎soe泰yjs克mtq新jkya闻ass网gsae版权所有,请勿未授权转载!!!

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

虎lvjjw泰w克irmbo新wldw闻jxru网z版权所有,请勿未授权转载!!!

include 'a.php';

虎goyn泰zsr克xst新whju闻mbo网mo版权所有,请勿未授权转载!!!

class b extends a{

虎pt泰ekboy克b_vyn新n闻ne网gw版权所有,请勿未授权转载!!!

    function __construct(){

虎bh泰kzoiy克ulcr新bic闻fgq网z_版权所有,请勿未授权转载!!!

        echo 'b';

虎otkbg泰qlcrs克v新nuje闻_z网bas版权所有,请勿未授权转载!!!

    }

虎suk泰apwk克q新_g闻xv网yfyi版权所有,请勿未授权转载!!!

}

虎rr泰kbn克_lcm新pezl闻ujz网krl版权所有,请勿未授权转载!!!

 

虎uafpv泰p克x新vuk闻rd网hyx版权所有,请勿未授权转载!!!

$test=new b();

虎kbrw泰qlvwm克wscdu新_w闻bs网ilvqh版权所有,请勿未授权转载!!!

运行结果:

虎uaujx泰dnv克gf新a闻_kxmc网knij版权所有,请勿未授权转载!!!

b

虎iwagv泰ksss克_vzwz新xknc闻bduxq网orrri版权所有,请勿未授权转载!!!


虎k泰qw克wbjs新i_闻otnml网ek版权所有,请勿未授权转载!!!

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

虎m泰nmqlc克g新nv闻k网q版权所有,请勿未授权转载!!!

 

虎ugyy泰sk克kef新rxe闻aers网zudx版权所有,请勿未授权转载!!!

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

虎ytt_泰uc克hnk新ifu闻pea网vht版权所有,请勿未授权转载!!!

include 'a.php';

虎c泰ps_g克kynf新ox闻fdgy网e版权所有,请勿未授权转载!!!

class b extends a{

虎kbn_泰j克fg新fxhv闻hi网l版权所有,请勿未授权转载!!!

    function __construct(){

虎nojff泰awy克wepo新dst闻jgk网dctld版权所有,请勿未授权转载!!!

        parent::__construct();

虎zzvj泰yf克ghl新kfki闻awm网_xzyw版权所有,请勿未授权转载!!!

        echo 'b';

虎bcpc泰zklz克e新v闻smrdw网zd版权所有,请勿未授权转载!!!

    }

虎z泰hnji克tayk_新rhgd闻g网h版权所有,请勿未授权转载!!!

}

虎bcv泰l_tdd克jyltx新bqoye闻_pq网r版权所有,请勿未授权转载!!!

 

虎kptv泰ktah克rg新lb闻i网ecsam版权所有,请勿未授权转载!!!

$test=new b();

虎chn泰no克r新komic闻mz网xr版权所有,请勿未授权转载!!!

那么输出结果是:

虎s泰f克pl_j新v闻wlc网pmhli版权所有,请勿未授权转载!!!

ab

虎q泰_克a新pqx闻rt网feuu版权所有,请勿未授权转载!!!


虎hswg泰mye克mk新wozwt闻nz网g版权所有,请勿未授权转载!!!

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

虎wtm泰qs克l新w闻eoa网t版权所有,请勿未授权转载!!!

 

虎g泰fe克bl新vw闻cjmxh网gmcpv版权所有,请勿未授权转载!!!

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

虎aparq泰s克c新abul闻r网cxpg版权所有,请勿未授权转载!!!

 

虎lxzvt泰qj克nzqw新_gv闻nx网fpjxc版权所有,请勿未授权转载!!!

BaseAction.class.php

虎e泰x克oa新fxpm闻b网wj_ik版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎sxkf泰lkxoo克oqnue新gp_闻bam网jh版权所有,请勿未授权转载!!!

    public function _initialize(){

虎mav泰hox克g新mmb闻jxnx_网wkl版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎enj泰rt克h新cqnfs闻ll网fu版权所有,请勿未授权转载!!!

    }

虎vh泰nngw克olxt新op闻qca网kn版权所有,请勿未授权转载!!!

}

虎mkx泰u_克j新adif闻o网nu版权所有,请勿未授权转载!!!


虎ttaz泰r克pvlw新hd闻y网nocm版权所有,请勿未授权转载!!!

IndexAction.class.php

虎jidv泰eb克g新si闻_v网jun版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎hl泰gxtht克b新jly闻p网etv版权所有,请勿未授权转载!!!

    public function (){

虎dwi泰di克w新y闻s网plvkz版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎vh泰g克tvgb新fhgty闻rb网r版权所有,请勿未授权转载!!!

    }

虎rc泰_uaez克syw新jco闻yweh网_srit版权所有,请勿未授权转载!!!

}

虎_drh泰cfz克qt新z闻nlkp网ynh版权所有,请勿未授权转载!!!


虎m泰extu克a新h闻ymqhp网h版权所有,请勿未授权转载!!!

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

虎hdqnl泰lv克ve新ogcue闻dr网galnb版权所有,请勿未授权转载!!!

baseActionindexAcition

虎iyer泰wgdq克woqw新pew闻amg网koe版权所有,请勿未授权转载!!!


虎mvlyj泰qzmu_克x_c新ouv闻_eqd网rvxug版权所有,请勿未授权转载!!!

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

虎kpt泰ukgk克j新rlad闻ln网ck版权所有,请勿未授权转载!!!

 

虎e_pl泰a克hi新q闻ovu网ljdjf版权所有,请勿未授权转载!!!

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

虎zp泰moanr克qqs新qk闻j网bsj版权所有,请勿未授权转载!!!




声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。

登录以发表评论

评论列表

    暂无数据