虎泰克博客

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


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

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

虎nsbwh泰qggf克vgn新pw_ph闻rdye网hu版权所有,请勿未授权转载!!!

 

虎vuq泰_tvc克l新qvp闻heg网v版权所有,请勿未授权转载!!!

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

虎klx泰d克s新a闻otwi网_ybp版权所有,请勿未授权转载!!!

 

虎g泰lx克nury新pvx_闻tdbt网kkdw版权所有,请勿未授权转载!!!

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

虎rb泰x克xrp新dlctr闻x_j网hwm版权所有,请勿未授权转载!!!

 

虎zor泰jxf克hug新kme闻tqhjy网wjwr版权所有,请勿未授权转载!!!

a.php

虎jnb泰_yk克aay新nm闻zkrjz网twsh版权所有,请勿未授权转载!!!

class a{

虎dmib泰lbrt克vh新hmkjp闻tj网bqn版权所有,请勿未授权转载!!!

    function __construct(){

虎br泰w克c新nlk_闻cpex网kr版权所有,请勿未授权转载!!!

        echo 'a';

虎iwnou泰egz克yr新_kzd闻qmefs网pv版权所有,请勿未授权转载!!!

    }

虎bqln泰j克wcu新om闻k网h版权所有,请勿未授权转载!!!

}

虎epkkz泰ukkjl克eqxbx新thg闻jo网j_b版权所有,请勿未授权转载!!!

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

虎f_j泰g克mld新itbl闻rw网fei版权所有,请勿未授权转载!!!

include 'a.php';

虎aqbf泰c_qmr克hdlc新mepz闻stq网akg_v版权所有,请勿未授权转载!!!

class b extends a{

虎cjozl泰haqj克zqy新vo闻fotj网qhiu版权所有,请勿未授权转载!!!

    function __construct(){

虎r泰m克dleea新krhz闻ezwc网s版权所有,请勿未授权转载!!!

        echo 'b';

虎itf泰lkfsa克tjo新gdj闻y网daae版权所有,请勿未授权转载!!!

    }

虎nf泰nv克vlck新fzquq闻at网qoqi版权所有,请勿未授权转载!!!

}

虎h泰zxz克frwt新vaeno闻ows网nwr版权所有,请勿未授权转载!!!

 

虎dv泰q克j新qg闻iqr网nb版权所有,请勿未授权转载!!!

$test=new b();

虎qhyk泰anpl克ta新yr闻lkigp网z版权所有,请勿未授权转载!!!

运行结果:

虎fxqtm泰msuli克gnme新bdi闻bj网on版权所有,请勿未授权转载!!!

b

虎ln泰icdv克uq新f闻jw网u版权所有,请勿未授权转载!!!


虎_pgu泰yqre克oz新g闻bxj网rvwlg版权所有,请勿未授权转载!!!

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

虎a泰zaz克v新jir闻hw网trd版权所有,请勿未授权转载!!!

 

虎ijbg泰qz克b新ehz闻sgmt网zhf版权所有,请勿未授权转载!!!

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

虎c泰uikez克vwgig新mtc闻texp网c版权所有,请勿未授权转载!!!

include 'a.php';

虎lw泰tx克zik新b闻po网fbw版权所有,请勿未授权转载!!!

class b extends a{

虎c泰luc克mp新vyuik闻f_网ovxf版权所有,请勿未授权转载!!!

    function __construct(){

虎daosx泰bek克yfjze新xslm闻afhlq网ky版权所有,请勿未授权转载!!!

        parent::__construct();

虎cs泰dt克zdz新bqmwh闻dmo网e版权所有,请勿未授权转载!!!

        echo 'b';

虎vzke泰rvxn克z新in闻yb网hzepw版权所有,请勿未授权转载!!!

    }

虎lncpq泰nmwj克lpq新trv闻msfe网du版权所有,请勿未授权转载!!!

}

虎oijy泰zyzh克lri新fxs闻e网bm版权所有,请勿未授权转载!!!

 

虎txqhx泰bwv克et新shq闻e网fdvh版权所有,请勿未授权转载!!!

$test=new b();

虎b泰y_克nvur新vni闻zls网yaq版权所有,请勿未授权转载!!!

那么输出结果是:

虎aooqe泰f_q克niywq新aghm闻a_sr网ax版权所有,请勿未授权转载!!!

ab

虎v泰f克yrdq新qi闻t网mayc版权所有,请勿未授权转载!!!


虎x泰n克uf新eealj闻hqkf网w版权所有,请勿未授权转载!!!

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

虎q泰r克uo新_tlpe闻i网t版权所有,请勿未授权转载!!!

 

虎ud泰alzu_克bhwx新ruw闻xhfi网wq版权所有,请勿未授权转载!!!

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

虎myq_泰sn克td新t闻dqav网wa版权所有,请勿未授权转载!!!

 

虎agofb泰zswem克dc新axhwn闻kotxj网keyx版权所有,请勿未授权转载!!!

BaseAction.class.php

虎nn泰o克vggy新_闻th网xsrdl版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎fli泰lrjmd克lj新j闻w网k_lqi版权所有,请勿未授权转载!!!

    public function _initialize(){

虎csb泰dy克nho新pnp闻hukwq网tf版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎zh泰w克xsnol新irbp闻tukb网mai版权所有,请勿未授权转载!!!

    }

虎g泰ccij克j新izpx闻ceg_u网blts版权所有,请勿未授权转载!!!

}

虎rqkrd泰fvse克ko新e闻pz网xcs版权所有,请勿未授权转载!!!


虎dta泰thp克le新_ocu闻tbjr网frf版权所有,请勿未授权转载!!!

IndexAction.class.php

虎jll泰d克dp新g闻k网cs版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎ygkrm泰wzkfp克_t新_b闻vfcx网lyshq版权所有,请勿未授权转载!!!

    public function (){

虎qbr泰tq克nvacl新azbi闻vw网n版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎q_tfm泰nsrkn克rilvu新zweh闻pz网tecfn版权所有,请勿未授权转载!!!

    }

虎ucrcx泰izunl克f新pka闻wxy网yts版权所有,请勿未授权转载!!!

}

虎ois泰gzfc克ssya新jnb闻iv网qin版权所有,请勿未授权转载!!!


虎vvns泰z克eqnxj新rp_ob闻kiql网ydn版权所有,请勿未授权转载!!!

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

虎pnm泰d克w新geyio闻st_gr网q版权所有,请勿未授权转载!!!

baseActionindexAcition

虎qkl泰dc克tlp新rhd闻ko网ukocl版权所有,请勿未授权转载!!!


虎j泰rct克t新ap闻cb_网dbdpt版权所有,请勿未授权转载!!!

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

虎tnz_e泰ij克ls新uq闻vg网inc版权所有,请勿未授权转载!!!

 

虎rw泰dcygu克to新q闻zgf网bix版权所有,请勿未授权转载!!!

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

虎utj泰yuohz克nok新e闻mu网lv版权所有,请勿未授权转载!!!




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

登录以发表评论

评论列表

    暂无数据