虎泰克博客

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


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

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

虎usrob泰pk克ligc新qcre闻hrm网d版权所有,请勿未授权转载!!!

 

虎gkn泰kg克m新tv闻rk网o版权所有,请勿未授权转载!!!

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

虎bkr泰_pylq克vy新sgad闻xvznp网vsle版权所有,请勿未授权转载!!!

 

虎twu泰arqig克ue新_feyb闻itb网_d版权所有,请勿未授权转载!!!

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

虎xdfi泰dm_克v新rxhz闻i网xjg版权所有,请勿未授权转载!!!

 

虎fg泰wtlb克buzsl新iaq闻g网romq版权所有,请勿未授权转载!!!

a.php

虎njupi泰bvox克ubl新ynawp闻duvu网fezd版权所有,请勿未授权转载!!!

class a{

虎zmb泰ui克g新z闻dttj网ieqp版权所有,请勿未授权转载!!!

    function __construct(){

虎_umv泰ram克rjn新ltzjy闻h网gn版权所有,请勿未授权转载!!!

        echo 'a';

虎gesao泰xlws克_pd新xbngu闻xwjrf网ohepy版权所有,请勿未授权转载!!!

    }

虎sop泰z克vo_u新l闻pli网os版权所有,请勿未授权转载!!!

}

虎m泰gfjhv克vfv新_j闻d网q版权所有,请勿未授权转载!!!

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

虎zjjye泰xwqkl克lt_新hag_闻hw网px版权所有,请勿未授权转载!!!

include 'a.php';

虎zlpqp泰wom克lei新h闻m网v版权所有,请勿未授权转载!!!

class b extends a{

虎heydq泰yv_zy克kotzh新mlfdo闻vr网xl版权所有,请勿未授权转载!!!

    function __construct(){

虎owwqq泰dqum克ahnrs新aku闻tacw网nm版权所有,请勿未授权转载!!!

        echo 'b';

虎hvkqr泰bcn克u__p新h闻hbmm网jp版权所有,请勿未授权转载!!!

    }

虎whj泰tyh克qdoh新a闻y_网bwn版权所有,请勿未授权转载!!!

}

虎niwb泰xp克p新_xgw闻enyqx网dgat版权所有,请勿未授权转载!!!

 

虎xlqp泰r克psyu新fkgml闻a网akeg版权所有,请勿未授权转载!!!

$test=new b();

虎lm泰spab克qhnt新sdios闻pqo网foc版权所有,请勿未授权转载!!!

运行结果:

虎_s泰brwjx克bak新otbi闻s网kha版权所有,请勿未授权转载!!!

b

虎gsw泰u_e克jflw_新nqwj闻_uhuo网v版权所有,请勿未授权转载!!!


虎srhwq泰m克x_新mf闻ikdn网ya版权所有,请勿未授权转载!!!

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

虎ap泰oavdy克qot新l闻kvptb网fmk版权所有,请勿未授权转载!!!

 

虎rsc泰bl克_gy新y闻wpy网d版权所有,请勿未授权转载!!!

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

虎nl泰n克fm新j闻e网e版权所有,请勿未授权转载!!!

include 'a.php';

虎fwtjc泰fqxmg克mth新qnx_j闻rkqzq网h版权所有,请勿未授权转载!!!

class b extends a{

虎jrm泰kfp克iydtx新yr闻lvfev网u版权所有,请勿未授权转载!!!

    function __construct(){

虎fgq泰ccxjf克xlo新l闻onf网_版权所有,请勿未授权转载!!!

        parent::__construct();

虎x泰bzmpm克vnl新lmzk闻h网wdqm版权所有,请勿未授权转载!!!

        echo 'b';

虎hyyg泰ya克m新vlxf闻vlh网nbmc版权所有,请勿未授权转载!!!

    }

虎yhp_泰f克bjhh新nck闻slota网cxu版权所有,请勿未授权转载!!!

}

虎_f泰ccz克cw新ntkht闻inik网k版权所有,请勿未授权转载!!!

 

虎m泰pudyc克wenbm新ixin闻bvy网c版权所有,请勿未授权转载!!!

$test=new b();

虎fi泰vpne克rkvmg新qct闻bs网ylypz版权所有,请勿未授权转载!!!

那么输出结果是:

虎f泰p克hxsv新xt_闻zp网qqh版权所有,请勿未授权转载!!!

ab

虎ccp泰ygw克h新lq闻n网aq版权所有,请勿未授权转载!!!


虎w泰wrs克rx新mpv闻_ply网zc版权所有,请勿未授权转载!!!

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

虎fuhsd泰rlu克nxk新batl闻k网kxdh版权所有,请勿未授权转载!!!

 

虎avs泰usd克rq新l闻e网vupxv版权所有,请勿未授权转载!!!

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

虎c泰j克fa新hydjs闻mgmo网xexm版权所有,请勿未授权转载!!!

 

虎zcuzr泰krufq克ooqqg新oj闻rbg网ie版权所有,请勿未授权转载!!!

BaseAction.class.php

虎_jtd泰ysax克quvs新bwh闻o网mzsr版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎zfi泰lht克dmqv新cfjbv闻wdui网rvn版权所有,请勿未授权转载!!!

    public function _initialize(){

虎uz泰dbp克vbivi新jm闻fyio网rexre版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎b泰on克h新wdxbz闻vt网q版权所有,请勿未授权转载!!!

    }

虎yyra泰rn克_新ctw闻ron网tbp版权所有,请勿未授权转载!!!

}

虎kijov泰g克pqpgn新tvbf闻nagl网ne版权所有,请勿未授权转载!!!


虎xk_xz泰egutg克ihm新owph闻bgsb_网ibi版权所有,请勿未授权转载!!!

IndexAction.class.php

虎v泰eama克l新epls闻kuk网_xv版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎ysxs泰rpwla克qyqjg新rcif闻fmlmn网dttn版权所有,请勿未授权转载!!!

    public function (){

虎ez泰gk克o新x闻ukmn网yo版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎iyhi泰_克bppf新_le闻e网coe版权所有,请勿未授权转载!!!

    }

虎q泰ibghv克tayq新vdqgs闻s_a网yrv版权所有,请勿未授权转载!!!

}

虎twaa泰a克wvyn新cjm闻wnq网rg_版权所有,请勿未授权转载!!!


虎hxpm泰tdmq克en新pahoz闻vnbnz网gvo版权所有,请勿未授权转载!!!

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

虎ggfoq泰be克sj新ln闻zl网a版权所有,请勿未授权转载!!!

baseActionindexAcition

虎ymyx泰b克cj新shb闻px网iftdl版权所有,请勿未授权转载!!!


虎wcel泰fci克pqyp新laptu闻flbi网v版权所有,请勿未授权转载!!!

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

虎yyos泰von克x新vr闻f_网zyc版权所有,请勿未授权转载!!!

 

虎yn泰d_克bkkr新iahe闻qqd网yu版权所有,请勿未授权转载!!!

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

虎othb泰juvqz克d新e闻wk网uuxeg版权所有,请勿未授权转载!!!




Δήλωση: όλα τα άρθρα / τα σχέδια που αναδημοσιεύονται στον δικτυακό τόπο έχουν ως σκοπό τη διαβίβαση περισσότερων πληροφοριών και τη διευκόλυνση της συζήτησης, πράγμα που δεν σημαίνει ότι ο δικτυακός τόπος, ο οικοδεσπότης και ο διοργανωτής συμφωνούν με τις απόψεις τους ή επιβεβαιώνουν τη γνησιότητα του περιεχομένου τους. Τα περιεχόμενα των άρθρων είναι μόνο για αναφορά. Εάν παραβιαστούν τα δικαιώματα του αρχικού συγγραφέα, επικοινωνήστε με τον διαχειριστή του δικτυακού τόπου.

Υπόγραψε στο σχόλιο

Λίστα σχολίων

    Δεν υπάρχουν δεδομένα