虎泰克博客

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


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

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

虎akx泰l克fsct新ly闻c网uxum版权所有,请勿未授权转载!!!

 

虎jj泰qx克wwdo新q__z闻b网vfhm版权所有,请勿未授权转载!!!

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

虎o_q泰uf克ul新rgg闻vu_ht网edve版权所有,请勿未授权转载!!!

 

虎a泰ozd克bnth新yockx闻m_网ubz版权所有,请勿未授权转载!!!

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

虎kxd泰wa克vsh新zgtvx闻wypx网kxnrr版权所有,请勿未授权转载!!!

 

虎gl泰mr克heh新usn_闻u网pzqr版权所有,请勿未授权转载!!!

a.php

虎mx泰isoa克bkd新qk闻aqep网jiyls版权所有,请勿未授权转载!!!

class a{

虎o泰pb_h克dg新jtp闻rdyku网mvvh版权所有,请勿未授权转载!!!

    function __construct(){

虎de__泰iww克vl新x闻avuk_网ks版权所有,请勿未授权转载!!!

        echo 'a';

虎uehle泰bs克xr新hswet闻i网xj版权所有,请勿未授权转载!!!

    }

虎omnsb泰hig克kad新bw闻dcq网b版权所有,请勿未授权转载!!!

}

虎p泰gk克ydkkk新eto_闻n网ge版权所有,请勿未授权转载!!!

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

虎w泰o克gem新ttpgv闻j网dkarj版权所有,请勿未授权转载!!!

include 'a.php';

虎f泰x克xaew新hzsm闻mzay网qoag版权所有,请勿未授权转载!!!

class b extends a{

虎_p泰moi克vvbft新kwmvq闻nsavn网nnceb版权所有,请勿未授权转载!!!

    function __construct(){

虎i泰wn克ip新z闻vkul网_版权所有,请勿未授权转载!!!

        echo 'b';

虎razf泰iq克dtck新rd闻xw网x版权所有,请勿未授权转载!!!

    }

虎n泰v克xdxio新si闻gpmdi网fjvkz版权所有,请勿未授权转载!!!

}

虎bhc泰wv克_新sn闻sxeq网wdwif版权所有,请勿未授权转载!!!

 

虎nkh_f泰ur克fv新qjguw闻mxjs网bhrkf版权所有,请勿未授权转载!!!

$test=new b();

虎qcu泰o克g新u闻lvn网meqk版权所有,请勿未授权转载!!!

运行结果:

虎mb泰tnbpw克xet新_wro闻rfooq网ypow版权所有,请勿未授权转载!!!

b

虎av_hm泰wml克bk新dt闻s网dqv版权所有,请勿未授权转载!!!


虎fan泰hdo克zlx新iqfp闻d网er版权所有,请勿未授权转载!!!

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

虎lb泰v克mdapg新dqc闻sslh网uzode版权所有,请勿未授权转载!!!

 

虎a泰g_y克jqzr新m_闻j网hhlvs版权所有,请勿未授权转载!!!

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

虎fkobl泰nwppj克gug新b闻pyo_e网ibj版权所有,请勿未授权转载!!!

include 'a.php';

虎s泰spc克x_新bx_an闻memi网pvebt版权所有,请勿未授权转载!!!

class b extends a{

虎xiais泰wbu克djwj新a闻efjr网i版权所有,请勿未授权转载!!!

    function __construct(){

虎go泰z克zg新f闻c_h网_ud版权所有,请勿未授权转载!!!

        parent::__construct();

虎zu泰sa克r新zx闻jz网fvh版权所有,请勿未授权转载!!!

        echo 'b';

虎w泰zd克vjs新xf闻uitz网v版权所有,请勿未授权转载!!!

    }

虎ezgto泰yeq克qs新d闻ql网qfqa版权所有,请勿未授权转载!!!

}

虎o泰y克kzrx新c闻qbotf网y版权所有,请勿未授权转载!!!

 

虎mpw泰e克qevx新ul闻qsh_网rbf版权所有,请勿未授权转载!!!

$test=new b();

虎ieiy泰ed克neu新yphz闻hk网xse版权所有,请勿未授权转载!!!

那么输出结果是:

虎b泰wfu克hklgj新nxb闻v网prwy版权所有,请勿未授权转载!!!

ab

虎bp泰ty克zozxz新bksmu闻jsnr网xxwie版权所有,请勿未授权转载!!!


虎ktz泰g克jmmv新c闻hnmw网z版权所有,请勿未授权转载!!!

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

虎zdve泰d克cslk新tj闻n网fmd版权所有,请勿未授权转载!!!

 

虎xs泰gmtr克gxr新wqtv闻xncdo网o版权所有,请勿未授权转载!!!

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

虎vpa泰uin克r新h闻iepxn网a版权所有,请勿未授权转载!!!

 

虎aevzq泰v_fin克skg新_bg闻xos网an版权所有,请勿未授权转载!!!

BaseAction.class.php

虎bgtt泰h_zp克z新ylj闻xwx网vhnf版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎dptg泰v_wr克_o新lokc闻qj网yjte版权所有,请勿未授权转载!!!

    public function _initialize(){

虎gotb泰c克t新rffu闻nk_v网uf版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎oca泰jlq克fo新vja闻mnr网g版权所有,请勿未授权转载!!!

    }

虎zxne泰m克i新_egu闻vj网kfhd版权所有,请勿未授权转载!!!

}

虎bakcw泰ez克in_c新xl闻e网cwhaj版权所有,请勿未授权转载!!!


虎qpoj泰wwidr克_s新jt闻fhy网ns版权所有,请勿未授权转载!!!

IndexAction.class.php

虎wu泰oyei克zd新ku闻ll网hzh版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎bzg泰pu_克eax_u新oej闻um网q版权所有,请勿未授权转载!!!

    public function (){

虎iunt泰vwc克b新np闻whir网cwifd版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎i泰dysun克j_k新jstcv闻wg网szogn版权所有,请勿未授权转载!!!

    }

虎gdivp泰jmsc克meh_新tq闻ned网fqt版权所有,请勿未授权转载!!!

}

虎ermku泰iy克ijgwu新zmprv闻z网bqgn版权所有,请勿未授权转载!!!


虎l泰gae克ohfy_新q闻sbyir网xgv版权所有,请勿未授权转载!!!

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

虎e泰ah克ey_bi新ejq闻xith网a版权所有,请勿未授权转载!!!

baseActionindexAcition

虎mkhry泰xvt克i新u闻ii网pkjvd版权所有,请勿未授权转载!!!


虎nfhh泰p克gp新mvj闻xoq网lcm版权所有,请勿未授权转载!!!

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

虎byjo泰onrnv克jt新smu_闻wua网ks版权所有,请勿未授权转载!!!

 

虎qgtrc泰rqou克ws新ji闻uwsw网lhp版权所有,请勿未授权转载!!!

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

虎ub泰j克b_新xcytm闻m网bgu版权所有,请勿未授权转载!!!




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

登录以发表评论

评论列表

    暂无数据