虎泰克博客

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


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

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

虎gd泰suxs克zjgt_新lyf闻yca网_iuef版权所有,请勿未授权转载!!!

 

虎x泰wec克ye_fn新gxtkr闻qwvv网tj版权所有,请勿未授权转载!!!

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

虎f泰jyx克_pwsi新p闻jz网dlnt版权所有,请勿未授权转载!!!

 

虎uko_泰x克t新pplh闻krl网j版权所有,请勿未授权转载!!!

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

虎ro_泰yj克k新ebfpv闻gfg网bgq版权所有,请勿未授权转载!!!

 

a.php

虎qt泰t克nz新rhuvt闻odgn网zvxc版权所有,请勿未授权转载!!!

class a{

虎gnxds泰b克qk新d闻dowz网pvghi版权所有,请勿未授权转载!!!

    function __construct(){

虎tqrn泰m克hsm新yi_f_闻xmdks网n版权所有,请勿未授权转载!!!

        echo 'a';

虎x泰wckbc克sgqi新j闻u网x版权所有,请勿未授权转载!!!

    }

虎gb泰h克uk新gj闻wkb网xb版权所有,请勿未授权转载!!!

}

虎sy泰r_n克s新kd闻efgxm网rry_版权所有,请勿未授权转载!!!

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

虎wtda泰_ofc_克hsvdu新nm闻t网xx版权所有,请勿未授权转载!!!

include 'a.php';

虎fnq泰dxj_b克bk新b__闻mbx网ohzy版权所有,请勿未授权转载!!!

class b extends a{

虎w_gbu泰zcbd克ozwmw新by闻tbjm网bkmzh版权所有,请勿未授权转载!!!

    function __construct(){

虎q_nrm泰kun_克xad新w闻mm网jfczd版权所有,请勿未授权转载!!!

        echo 'b';

虎fsdn泰sxk克qm新sdoqo闻kjwwu网ntj版权所有,请勿未授权转载!!!

    }

虎xr泰uaqp克hk_vn新f_c_j闻yhbo网krg版权所有,请勿未授权转载!!!

}

虎_gns泰jbw克x新fot闻kkebt网xzlc版权所有,请勿未授权转载!!!

 

虎bem泰dxvx克trajv新tpnh闻zk网s版权所有,请勿未授权转载!!!

$test=new b();

虎ml泰box克fp新xhq_闻d网h版权所有,请勿未授权转载!!!

运行结果:

虎n泰vxvs克xnfmw新u闻ct网_版权所有,请勿未授权转载!!!

b

虎yt泰evsji克me新evl闻hdjlm网msl版权所有,请勿未授权转载!!!


虎i泰roja克rkvs新e闻ld_y网eunc版权所有,请勿未授权转载!!!

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

虎cg泰hbal克vchhy新oe闻lyha网sa版权所有,请勿未授权转载!!!

 

虎ualn泰j克_kf新gv_yd闻u网q版权所有,请勿未授权转载!!!

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

虎k_泰ymts克jk_xi新om闻dtihk网zv_um版权所有,请勿未授权转载!!!

include 'a.php';

虎m泰ex克k新s闻jox_网cow版权所有,请勿未授权转载!!!

class b extends a{

虎if泰jdyvu克ht新p_diy闻iyd网lcc版权所有,请勿未授权转载!!!

    function __construct(){

虎irw_o泰qbhjc克b新gme闻jihlf网epbv版权所有,请勿未授权转载!!!

        parent::__construct();

虎gct泰mspe克q新gq闻hf网zc版权所有,请勿未授权转载!!!

        echo 'b';

虎tlfbl泰anx克an新jyz闻fqxk网whre版权所有,请勿未授权转载!!!

    }

虎iaeg泰jslt克_qpea新iyfty闻mj网hlkq版权所有,请勿未授权转载!!!

}

虎av泰hau克viauk新yup闻jcahb网ibjl版权所有,请勿未授权转载!!!

 

虎fhqu泰qmhpk克iq新w闻m网t版权所有,请勿未授权转载!!!

$test=new b();

虎lyttg泰xugrm克c新gzge闻h网lkpd_版权所有,请勿未授权转载!!!

那么输出结果是:

虎_l泰bxtu克tia新k闻okp网dtev版权所有,请勿未授权转载!!!

ab

虎pvj泰l克u_新h闻gd网gwvb版权所有,请勿未授权转载!!!


虎ohugk泰ntqd克w新zkzc_闻ivo网fqfg版权所有,请勿未授权转载!!!

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

虎ckvj_泰ey克koaz_新b_ajf闻hafq网wo版权所有,请勿未授权转载!!!

 

虎hpbhd泰jrkk克chwms新sx闻hqsq网jjue版权所有,请勿未授权转载!!!

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

虎mfng泰ehsy克o新npte闻ulniq网ihuxk版权所有,请勿未授权转载!!!

 

虎kx泰o克ej新xilk闻yi网va版权所有,请勿未授权转载!!!

BaseAction.class.php

虎fz泰gw克evbk新n闻lu网tsmr版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎foetp泰wbbon克m新bd闻so网idxaq版权所有,请勿未授权转载!!!

    public function _initialize(){

虎ykpp泰vb克_新gmiu闻n网k版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎gifus泰egri克rgro新ge闻s网yrn版权所有,请勿未授权转载!!!

    }

虎mj_a_泰iimi克oar新slwq闻qfgg网iwhg版权所有,请勿未授权转载!!!

}

虎j泰aetk克dcxr新bhe闻qhkiy网h版权所有,请勿未授权转载!!!


虎xo泰r_克qqven新mjwzv闻zzh网qyw版权所有,请勿未授权转载!!!

IndexAction.class.php

虎yox泰u克ho新gmykf闻u网sv版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎t泰lgekt克bvbn新b闻hxy网rt版权所有,请勿未授权转载!!!

    public function (){

虎loqkb泰af克_a新psb闻cc网wbayz版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎xokh泰o克pil新jucqd闻ncsr网yq版权所有,请勿未授权转载!!!

    }

虎b泰vvx克lld新gp闻m网il_版权所有,请勿未授权转载!!!

}

虎xqkgc泰xi克grqyb新by_闻yc网ar版权所有,请勿未授权转载!!!


虎f泰s克xm_vk新ykz闻d网frzvc版权所有,请勿未授权转载!!!

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

虎hgm泰ophnx克rlde新buuu闻tb_网nelja版权所有,请勿未授权转载!!!

baseActionindexAcition

虎rw_lq泰dsp克fundo新f__a闻vef网w_i_z版权所有,请勿未授权转载!!!


虎dgmdn泰f克p新o闻ove网_qp版权所有,请勿未授权转载!!!

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

虎dfz泰uh克bn新ar闻dpi网voalp版权所有,请勿未授权转载!!!

 

虎vbmj泰pfr克jw新mc闻ygrm网suro版权所有,请勿未授权转载!!!

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

虎b泰q克kuwx新jssui闻c网vwqo版权所有,请勿未授权转载!!!




Bản phát biểu: tất cả các bản vẽ được in trên trang web là để truyền thêm thông tin và dễ dàng thảo luận, không có nghĩa là website, máy chủ và người cầm đầu đồng ý ý kiến của họ hoặc xác nhận tính xác thực của nội dung của họ. Nội dung các bài báo chỉ có liên quan. Nếu quyền của tác giả gốc bị vi phạm, xin liên lạc với quản trị website.

Ký vào để ghi chú

Ghi chú

    Không có dữ liệu