虎泰克博客

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


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

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

虎gmps泰qy克hdwj新s闻fxyq网w_mv版权所有,请勿未授权转载!!!

 

虎szpf泰ojjpc克jydvm新qa闻kxt网f版权所有,请勿未授权转载!!!

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

虎epkq泰wta克xryhk新hlc闻fbklw网xduhg版权所有,请勿未授权转载!!!

 

虎cnug泰dlmfh克vgrd新qtnhz闻m网zpmeg版权所有,请勿未授权转载!!!

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

虎f泰i克utnp新wj闻xkat网p版权所有,请勿未授权转载!!!

 

虎rq泰d克trpyl新dkma闻eb网xmib版权所有,请勿未授权转载!!!

a.php

虎dqepb泰azglf克x新qb闻noerf网pcv版权所有,请勿未授权转载!!!

class a{

虎augi泰q_ys克wxmk新uci闻kk网rcp版权所有,请勿未授权转载!!!

    function __construct(){

虎_dt泰vnuqh克ffsws新fy闻hx网n版权所有,请勿未授权转载!!!

        echo 'a';

虎o泰czby克c新bt_my闻evxgv网wcu版权所有,请勿未授权转载!!!

    }

虎g_gz泰c克urxnu新_n闻hj网vjui版权所有,请勿未授权转载!!!

}

虎joit泰wu克e_k新mbl闻i网vdln版权所有,请勿未授权转载!!!

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

虎_djye泰fbhm克q新zubds闻xc网or_ek版权所有,请勿未授权转载!!!

include 'a.php';

虎vl泰wbh克uprbh新zdkuo闻vx网zu版权所有,请勿未授权转载!!!

class b extends a{

虎szl泰jcqus克xhzb新apo闻lphoy网cmdy版权所有,请勿未授权转载!!!

    function __construct(){

虎z泰znx克aezvw新l闻q_网l版权所有,请勿未授权转载!!!

        echo 'b';

虎q泰xovvg克sqm新xumf闻kmndz网_jhkh版权所有,请勿未授权转载!!!

    }

虎ln泰svjib克c新c闻nqa网izevg版权所有,请勿未授权转载!!!

}

虎awx泰fobg克uycp新a闻f网rs版权所有,请勿未授权转载!!!

 

虎_ewo泰xqqj克lcufd新go闻xjegx网qc版权所有,请勿未授权转载!!!

$test=new b();

虎l泰o克_yn新paa闻l网banjp版权所有,请勿未授权转载!!!

运行结果:

虎zh泰mts克ev_新jaiv闻r网rz_hc版权所有,请勿未授权转载!!!

b

虎iemi泰dlga克j新ritf闻yhi_m网fpqqv版权所有,请勿未授权转载!!!


虎az__p泰emdm克dtyg新bpp闻_j网uxeyf版权所有,请勿未授权转载!!!

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

虎wmu泰ryj克rdx新f闻vvo_q网mlzxe版权所有,请勿未授权转载!!!

 

虎jnuqc泰gmvb克u_ph新szir闻dzl网nhfjm版权所有,请勿未授权转载!!!

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

虎izv_泰xnd_r克of新rp闻voxl网k_yva版权所有,请勿未授权转载!!!

include 'a.php';

虎bg泰e克w新dqm闻zab网p版权所有,请勿未授权转载!!!

class b extends a{

虎lqgeg泰urd克fy新l_闻u网ycc版权所有,请勿未授权转载!!!

    function __construct(){

虎yyewv泰wuez克ukhm新gf闻zs网ldia版权所有,请勿未授权转载!!!

        parent::__construct();

虎dok_h泰qhdx克c_gl新z闻j网wt版权所有,请勿未授权转载!!!

        echo 'b';

虎o_u泰ueb克_t新k闻fzpwk网ste版权所有,请勿未授权转载!!!

    }

虎yuot泰swwd克ibsmj新qiaat闻azcr网up_版权所有,请勿未授权转载!!!

}

虎erbn泰wrp克nuogl新nxcxg闻bbt网b_l版权所有,请勿未授权转载!!!

 

虎mrpg泰gmf克wmzv新b_xci闻fqg网ikcn版权所有,请勿未授权转载!!!

$test=new b();

虎tmaa泰jsa克y新houp闻o网xhfui版权所有,请勿未授权转载!!!

那么输出结果是:

虎mp泰_克hxqk新bh闻cf网quxgb版权所有,请勿未授权转载!!!

ab

虎jvjzy泰dacgx克r新xro闻rfsp网d版权所有,请勿未授权转载!!!


虎wxhp泰nylww克gvah新xxbdw闻zxqxh网tk版权所有,请勿未授权转载!!!

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

虎we_x泰s克onrwn新u闻rm网p版权所有,请勿未授权转载!!!

 

虎ruvsi泰jpefl克lvhoo新vw闻_q网qhe版权所有,请勿未授权转载!!!

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

虎anha泰ctztq克xphpg新afd闻j网_dq版权所有,请勿未授权转载!!!

 

虎try泰wcr克mcac新d_yq闻deotc网f版权所有,请勿未授权转载!!!

BaseAction.class.php

虎ngpd泰drlhb克p新yl闻kr网qho版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎wdi泰_克lkk新mk闻hwxi网axfbz版权所有,请勿未授权转载!!!

    public function _initialize(){

虎upkv泰k克wmoa新lfxp闻oedhv网nxj版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎yz泰t克okix新qzz闻labk网_ds版权所有,请勿未授权转载!!!

    }

虎sqm泰amia克xwfcq新km闻xm网cuy版权所有,请勿未授权转载!!!

}

虎pz泰ytyui克cff新xfhoa闻ubsao网na版权所有,请勿未授权转载!!!


虎ny泰fjuh克kkaws新o闻a网vgeo版权所有,请勿未授权转载!!!

IndexAction.class.php

虎v泰na克n新jdq闻covbq网py版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎fwq泰dvv克wl新nun_闻fpzoo网vwrc版权所有,请勿未授权转载!!!

    public function (){

虎m泰chfj克fksy新otyv闻j网qnm版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎dsjdj泰u克gl新yk闻tx网atnbz版权所有,请勿未授权转载!!!

    }

虎jctx泰vm克j新nul闻qxf网mz版权所有,请勿未授权转载!!!

}

虎bg泰mdao克sz新ojq闻d网x版权所有,请勿未授权转载!!!


虎yiji泰hiky克cxvc新pefbg闻kvmby网nad版权所有,请勿未授权转载!!!

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

虎j泰ry克jeb新xb闻yh网cnbcr版权所有,请勿未授权转载!!!

baseActionindexAcition

虎uzab泰fwu克v新g闻inm网hjf版权所有,请勿未授权转载!!!


虎g泰aclmi克ucob新r闻o网wv版权所有,请勿未授权转载!!!

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

虎mx泰twl克_r新yqn闻uvgh网dlsjq版权所有,请勿未授权转载!!!

 

虎mui泰fr克qqz新vo闻t_tmb网lfqzz版权所有,请勿未授权转载!!!

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

虎vx泰kf克l_oy新e闻bte网b版权所有,请勿未授权转载!!!




Verklaring: alle artikelen /tekeningen die op deze website worden weergegeven, zijn bedoeld om meer informatie te verzenden en de discussie te vergemakkelijken, wat niet betekent dat de website, de host en de organisator het eens zijn met hun meningen of de authenticiteit van hun inhoud bevestigen. De inhoud van de artikelen is alleen voor referentie. Indien de rechten van de oorspronkelijke auteur worden geschonden, neem dan contact op met de beheerder van de website.

Schrijf in om commentaar te geven

Lijst van opmerkingen

    Geen gegevens