虎泰克博客

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


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

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

虎ccu泰gf克catdd新aym闻zs网s版权所有,请勿未授权转载!!!

 

虎ytpc泰ehfv克mvi_e新vmq闻bw网nmeo版权所有,请勿未授权转载!!!

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

虎odxtp泰as克tatj新runcv闻jrw网h_版权所有,请勿未授权转载!!!

 

虎g泰p克yjux新fx闻r网zmvsi版权所有,请勿未授权转载!!!

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

虎wjxo泰tuml克m新njtee闻c网m版权所有,请勿未授权转载!!!

 

虎ms泰oo克msydf新e闻fzar网zpai版权所有,请勿未授权转载!!!

a.php

虎_泰daf克gma新ker闻aea网cl版权所有,请勿未授权转载!!!

class a{

虎v_txs泰x克wtrzc新vyct闻fitje网wh版权所有,请勿未授权转载!!!

    function __construct(){

虎t泰wqxaz克prsw新hmtvl闻e网y版权所有,请勿未授权转载!!!

        echo 'a';

虎yuros泰iqy克p_新cdkyd闻o网e版权所有,请勿未授权转载!!!

    }

虎rhqqk泰svybm克nbnli新gh闻zss网dfuo版权所有,请勿未授权转载!!!

}

虎pbjfb泰r克kudi新rrfde闻ivzpo网cp版权所有,请勿未授权转载!!!

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

虎o泰vrpfs克gckp新slf闻ze网lxl版权所有,请勿未授权转载!!!

include 'a.php';

虎xv_vl泰kxgfv克qzan新e闻hyr网fr版权所有,请勿未授权转载!!!

class b extends a{

虎qw泰wsb克qi新ye闻rv网dbgml版权所有,请勿未授权转载!!!

    function __construct(){

虎qzf泰sh克u新g闻hyau网s版权所有,请勿未授权转载!!!

        echo 'b';

虎qqb泰dbwo克y新lqj闻n网afdhi版权所有,请勿未授权转载!!!

    }

虎mnkj泰hdg克it新ai闻cim网hwtt版权所有,请勿未授权转载!!!

}

虎a泰etr克jvzud新dm闻trv网nyqon版权所有,请勿未授权转载!!!

 

虎auyj泰zz克kvrr新facqh闻v网_版权所有,请勿未授权转载!!!

$test=new b();

虎lcc泰nxb克zwla新tasx闻n网o版权所有,请勿未授权转载!!!

运行结果:

虎o_me泰pvpl克slpf新yslmx闻hegq网sx版权所有,请勿未授权转载!!!

b

虎p泰eqnd克sg新yly闻stqq网udbxh版权所有,请勿未授权转载!!!


虎k泰teovc克reebh新eygdl闻f网oqvn版权所有,请勿未授权转载!!!

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

虎nl泰mdy克lc_l_新zm闻vplrb网zf版权所有,请勿未授权转载!!!

 

虎w_xur泰r克qpqh新trhj闻hv网zmy版权所有,请勿未授权转载!!!

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

虎egsdk泰pxko克um新h闻g网pouw版权所有,请勿未授权转载!!!

include 'a.php';

虎mpv泰_o克uhk新mthig闻jkw网mrv版权所有,请勿未授权转载!!!

class b extends a{

虎ikhkw泰pkd克bgka新ceu闻sx网cc版权所有,请勿未授权转载!!!

    function __construct(){

虎b_d泰_f克avdt新xogcd闻b网agj版权所有,请勿未授权转载!!!

        parent::__construct();

虎fgezn泰rvxz克o新x_rc闻w网dynww版权所有,请勿未授权转载!!!

        echo 'b';

虎ua泰ht克t新r闻nh网hzm版权所有,请勿未授权转载!!!

    }

虎jj泰_z克gt新rpso闻f网ssz版权所有,请勿未授权转载!!!

}

虎ym泰pe克_新g闻ltl网zwn版权所有,请勿未授权转载!!!

 

虎nusok泰wrc克ppjq新ok闻g网j版权所有,请勿未授权转载!!!

$test=new b();

虎qx泰fqde克ihrhm新hscim闻_网vtvck版权所有,请勿未授权转载!!!

那么输出结果是:

虎kl泰gxo克ikbc新va闻nmh网k版权所有,请勿未授权转载!!!

ab

虎cpdj泰zpwpg克fwnzb新nk闻ufbmg网ifc版权所有,请勿未授权转载!!!


虎zoi_泰i_b克_tpwg新lcyfl闻yyf_z网fljy版权所有,请勿未授权转载!!!

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

虎b泰hg克r新b闻z网mtloh版权所有,请勿未授权转载!!!

 

虎v泰xma克rantw新iny闻pae网vmzr版权所有,请勿未授权转载!!!

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

虎myrj泰hnhz克yfqn新bpd闻rflra网oohq版权所有,请勿未授权转载!!!

 

虎c泰h克x新uen闻vou网gwkq版权所有,请勿未授权转载!!!

BaseAction.class.php

虎a泰yewpi克bhglv新vt闻so网nm版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎nefib泰l_pc克sq新wtq闻i_smx网kgoh版权所有,请勿未授权转载!!!

    public function _initialize(){

虎cnkhd泰_gdp克e新d闻ik网wgf版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎qmzvf泰w克dlvl新kuia闻pz网p版权所有,请勿未授权转载!!!

    }

虎ol泰l克jbtb新y闻cnt网sco版权所有,请勿未授权转载!!!

}

虎qg泰rfhac克flrrc新mw闻pbbl网xuyp版权所有,请勿未授权转载!!!


虎oo泰fo克va新tgvo闻w网pfzig版权所有,请勿未授权转载!!!

IndexAction.class.php

虎o泰i克dqv新iacc闻a网lv版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎p泰sgt克i新ibk闻y网mm版权所有,请勿未授权转载!!!

    public function (){

虎kr泰pp_克rnsk新hqnh闻j网gzv版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎gcpp泰ml_dy克wod新w闻a网eue版权所有,请勿未授权转载!!!

    }

虎jp泰s_克bcx新zhrlf闻dbb网j版权所有,请勿未授权转载!!!

}

虎_s泰lprgo克ummoy新h闻slo网vklz版权所有,请勿未授权转载!!!


虎vjihe泰__v克mywy新eqmf闻fpn网u版权所有,请勿未授权转载!!!

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

虎z泰vytio克ufu新a闻qxifk网iyqk版权所有,请勿未授权转载!!!

baseActionindexAcition

虎fja泰q克ea新xeybn闻rkl_t网csga版权所有,请勿未授权转载!!!


虎hjzvi泰_gv克ow新vpfxz闻wl网sxmhv版权所有,请勿未授权转载!!!

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

虎idy泰vvpuk克_ut新vgjz闻lpble网z版权所有,请勿未授权转载!!!

 

虎hdgc泰njz克_s新tzf闻krgl网pf版权所有,请勿未授权转载!!!

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

虎hfzj泰kcya克cx新fj闻ybir网hw版权所有,请勿未授权转载!!!




Statement: all articles / drawings reproduced on this website are for the purpose of transmitting more information and facilitating discussion, which does not mean that the website, the host and the organizer agree with their opinions or confirm the authenticity of their contents. The contents of the articles are for reference only. If the rights of the original author are violated, please contact the website administrator.

Sign in to comment

Comment list

    No data