虎泰克博客

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


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

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

虎okoq泰k克ne_jj新udll闻w网ri版权所有,请勿未授权转载!!!

 

虎nhw泰h_lbf克dnjn新foqj闻i网w版权所有,请勿未授权转载!!!

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

虎bo泰ep克wlddb新mb闻hajs网a版权所有,请勿未授权转载!!!

 

虎vf_ca泰m_i克z新qw闻oz网o版权所有,请勿未授权转载!!!

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

虎hql泰gft克cn新te_闻ngll网gy版权所有,请勿未授权转载!!!

 

虎sfeou泰qan克t新dkcib闻_i网qtxm版权所有,请勿未授权转载!!!

a.php

虎c泰ef克sf新qx闻p网mith_版权所有,请勿未授权转载!!!

class a{

虎yld泰o克akxin新zelbo闻lf网__版权所有,请勿未授权转载!!!

    function __construct(){

虎k泰h克s新uuzac闻xnd网vne版权所有,请勿未授权转载!!!

        echo 'a';

虎kzflx泰bh克trkd新kmcco闻ce网zeo版权所有,请勿未授权转载!!!

    }

虎b泰j克lmogg新t闻c网m版权所有,请勿未授权转载!!!

}

虎cn泰kpp克woe新t_d闻hqa网z版权所有,请勿未授权转载!!!

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

虎qf泰hvn克ynhs新a闻zval网uombg版权所有,请勿未授权转载!!!

include 'a.php';

虎boo泰qaiqf克ghmw新a_闻umns网r版权所有,请勿未授权转载!!!

class b extends a{

虎ag泰l克pqqd新w闻boy网elgsw版权所有,请勿未授权转载!!!

    function __construct(){

虎hzp泰tsyzf克rig新uc闻h网tsgq版权所有,请勿未授权转载!!!

        echo 'b';

虎jwo泰b克t新f闻raxc网aw版权所有,请勿未授权转载!!!

    }

虎zeyl泰dlpw克pb新wdhic闻avn网lc_f版权所有,请勿未授权转载!!!

}

虎s泰hlb克ea新vpa_o闻eieed网mbja版权所有,请勿未授权转载!!!

 

虎ugg泰ahcm克fop新aq_闻sada网q版权所有,请勿未授权转载!!!

$test=new b();

虎ij_pv泰kgyqi克fvph新dhhu闻so网i版权所有,请勿未授权转载!!!

运行结果:

虎kpyfg泰mks克nigtw新zczlx闻i网_oof版权所有,请勿未授权转载!!!

b

虎ucank泰d克jqxu新x闻wrr网aph版权所有,请勿未授权转载!!!


虎yxuzy泰r克xdcjc新bym闻w网c版权所有,请勿未授权转载!!!

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

虎gipt泰lm克vg新el闻d网pqany版权所有,请勿未授权转载!!!

 

虎edlab泰dda克pug新k闻dn网ea版权所有,请勿未授权转载!!!

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

虎gbomi泰ykkqr克edlat新n闻rz_t网bth版权所有,请勿未授权转载!!!

include 'a.php';

虎g泰l克kh_d新hu闻ibygn网sycbz版权所有,请勿未授权转载!!!

class b extends a{

虎z泰v_zhn克ary新aejkt闻pg网jeccl版权所有,请勿未授权转载!!!

    function __construct(){

虎bxtf泰n克kvdig新bfpjb闻z网rib版权所有,请勿未授权转载!!!

        parent::__construct();

虎fq泰zal克t新t闻tgc_y网dw版权所有,请勿未授权转载!!!

        echo 'b';

虎vusje泰tce克hbsaf新xn闻epktx网uk版权所有,请勿未授权转载!!!

    }

虎o泰e克fwj新gcil闻es网w版权所有,请勿未授权转载!!!

}

虎da_e泰r克hwgd新u闻g网uoxh版权所有,请勿未授权转载!!!

 

虎gwq泰jxq克t新gpjch闻tns网bz版权所有,请勿未授权转载!!!

$test=new b();

虎i泰x_ptn克kp新czs闻dhk网bz版权所有,请勿未授权转载!!!

那么输出结果是:

虎_mj_泰p克k新otaj闻_网vuj版权所有,请勿未授权转载!!!

ab

虎xwkja泰xevaa克tivq新uo闻llnhq网y版权所有,请勿未授权转载!!!


虎xj泰wm克mz新kbojp闻td网p_版权所有,请勿未授权转载!!!

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

虎v泰xfds克ha新_j_r闻take网acwis版权所有,请勿未授权转载!!!

 

虎x泰wcrou克x新zgqn闻jpp网bdix版权所有,请勿未授权转载!!!

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

虎vll泰uafp克s新z闻ov网nqzc版权所有,请勿未授权转载!!!

 

虎e泰by克zxus新vela闻rfs网hlmu版权所有,请勿未授权转载!!!

BaseAction.class.php

虎jzmkf泰z克z新cmstj闻a_upv网lg版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎c泰frv克tssr新r闻pbkes网eugc版权所有,请勿未授权转载!!!

    public function _initialize(){

虎bglb泰y克kxp新bd闻vcbfn网nw版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎vopv泰qx克d新frfw闻vvumw网gy版权所有,请勿未授权转载!!!

    }

虎fjidx泰j_c克w新u闻xzhk网zuo版权所有,请勿未授权转载!!!

}

虎ook泰tgfk克cvc新kpwue闻bn网ocl版权所有,请勿未授权转载!!!


虎rep泰k克vra新weize闻_kvln网c版权所有,请勿未授权转载!!!

IndexAction.class.php

虎eoo泰ppi克_b新fmds闻tpfi网k版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎vwwvw泰uh克jyp_新gcmjt闻hq网qkrtp版权所有,请勿未授权转载!!!

    public function (){

虎cmiba泰__apx克fij新po闻gltag网sr版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎ks泰c克ywnw新zyfc闻t网m版权所有,请勿未授权转载!!!

    }

虎fyvvv泰rfvz克ifgme新u闻v网bz版权所有,请勿未授权转载!!!

}

虎xosdh泰vypj克jbvkm新q闻qr网y_ypk版权所有,请勿未授权转载!!!


虎_su泰awh_克wv新u闻z网qc版权所有,请勿未授权转载!!!

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

虎svkxg泰csa克brir新ux闻_网rpj版权所有,请勿未授权转载!!!

baseActionindexAcition

虎jzuy泰grsdu克jn_新i闻lhlyi网w版权所有,请勿未授权转载!!!


虎xrogj泰sdg克ua_in新hn闻_fk网ouo版权所有,请勿未授权转载!!!

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

虎olqq泰gzwtk克u新feyi闻ler网cndkw版权所有,请勿未授权转载!!!

 

虎jwzkk泰t克_qc新xx闻bk网sg_版权所有,请勿未授权转载!!!

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

虎p泰r克uj新g闻qsu网xkpf版权所有,请勿未授权转载!!!




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

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

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

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