虎泰克博客

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


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

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

虎t泰jtdqm克y新rfuvi闻yqsbs网vv版权所有,请勿未授权转载!!!

 

虎qudx泰tchzu克so新hphv闻zu网ptqo版权所有,请勿未授权转载!!!

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

虎yyodn泰oehq克sd新phxee闻avmyv网rjy版权所有,请勿未授权转载!!!

 

虎cvb泰ouxok克h新rgiwd闻bwmm网vgjqy版权所有,请勿未授权转载!!!

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

虎dtrib泰v_b克c_p新gjvfk闻xy网vuqwz版权所有,请勿未授权转载!!!

 

虎tjjsk泰tgd克x新eggih闻xbfn网wwbsq版权所有,请勿未授权转载!!!

a.php

虎lvhv泰gofy克cm新z闻zye网_kbf版权所有,请勿未授权转载!!!

class a{

虎upzvn泰sc克_新zxkr闻tr网egpd版权所有,请勿未授权转载!!!

    function __construct(){

虎xh泰_leu克h_zq新_qzop闻sbc_网gnij版权所有,请勿未授权转载!!!

        echo 'a';

虎ntnhs泰ka克uaov_新kng闻rwog网jqp版权所有,请勿未授权转载!!!

    }

虎wv泰b克egx新q闻kkqpt网m版权所有,请勿未授权转载!!!

}

虎qxp泰g克st新odla闻hx网uh版权所有,请勿未授权转载!!!

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

虎bwyi泰n克ombae新vy闻kx网vm版权所有,请勿未授权转载!!!

include 'a.php';

虎o泰il克btz新pln闻wey网lkxe版权所有,请勿未授权转载!!!

class b extends a{

虎ced泰qid克l新v闻p网d_qvn版权所有,请勿未授权转载!!!

    function __construct(){

虎omzpr泰im_克cus新a闻mvt网k版权所有,请勿未授权转载!!!

        echo 'b';

虎mg泰ivgs克wqj新v闻ih_网qbij版权所有,请勿未授权转载!!!

    }

虎eepq泰h克zbj新zqlsv闻efsb网i版权所有,请勿未授权转载!!!

}

虎ct泰bxs克hp_sj新n闻b网_lymz版权所有,请勿未授权转载!!!

 

虎aogt泰_ajs克eq新eqwgf闻qgike网wyx版权所有,请勿未授权转载!!!

$test=new b();

虎vf泰yzrb克_kabv新tnbw闻ofqj网cd版权所有,请勿未授权转载!!!

运行结果:

虎qerb泰aj克dno新ari闻drrnq网diusw版权所有,请勿未授权转载!!!

b

虎hqu泰lamyy克hx新fwf闻evzwv网tgtyq版权所有,请勿未授权转载!!!


虎fa泰m克fcd新z闻qlb网zyn版权所有,请勿未授权转载!!!

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

虎fjhe泰qqhgj克hbk新rfd闻yuxov网ukr版权所有,请勿未授权转载!!!

 

虎p_泰xo克_er新dfuis闻xkvu网qv版权所有,请勿未授权转载!!!

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

虎r泰a克tiiiy新shcm闻ltwtp网s版权所有,请勿未授权转载!!!

include 'a.php';

虎owze泰i_a克zq__新gm闻lmvc网o版权所有,请勿未授权转载!!!

class b extends a{

虎hc泰ev克f_新opz闻pvea网x_g版权所有,请勿未授权转载!!!

    function __construct(){

虎ubizk泰de克gkoyo新u闻vssj网li版权所有,请勿未授权转载!!!

        parent::__construct();

虎v泰mc克det_新x闻rvhck网hkf版权所有,请勿未授权转载!!!

        echo 'b';

虎_qvn泰haelt克nrg新e闻hbzj网hpcv版权所有,请勿未授权转载!!!

    }

虎zid泰hj克hqn新fbmfj闻wfbj网s版权所有,请勿未授权转载!!!

}

虎rg泰a_yvc克g新_h闻vab网m版权所有,请勿未授权转载!!!

 

虎fcwz泰txvio克ne新hcl闻r网w版权所有,请勿未授权转载!!!

$test=new b();

虎jx泰gt克wn_新gjtb闻u网avsg版权所有,请勿未授权转载!!!

那么输出结果是:

虎r泰rgt克oszs新xyht闻sv_yy网znf_x版权所有,请勿未授权转载!!!

ab

虎arkn泰b克otcy新d闻ktny网yuskh版权所有,请勿未授权转载!!!


虎iek泰icd克f新ei闻m网hpc_版权所有,请勿未授权转载!!!

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

虎mjne泰mp克aj新q闻gghwz网nn版权所有,请勿未授权转载!!!

 

虎lr泰gjoge克r新mqan闻sd网oufx版权所有,请勿未授权转载!!!

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

虎i泰mg克g新gi闻k网bqz版权所有,请勿未授权转载!!!

 

虎x_泰y克do新oldci闻fq网z版权所有,请勿未授权转载!!!

BaseAction.class.php

虎lim泰jifze克ag_k新chcc闻ju网k版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎moidq泰e克z新smjd闻natmo网att版权所有,请勿未授权转载!!!

    public function _initialize(){

虎hf泰hobtk克qgmq新z闻bh网bvxys版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎kz泰z克chk新_wah闻tio网atvq版权所有,请勿未授权转载!!!

    }

虎ofsly泰hrun克vys新zwc闻_网pq版权所有,请勿未授权转载!!!

}

虎cz泰k克_sii新qchq闻xcxc网b版权所有,请勿未授权转载!!!


虎tx泰uxy克iuruj新sr闻zu网w版权所有,请勿未授权转载!!!

IndexAction.class.php

虎jb泰hbjiv克oaam新c闻amkvw网oodyd版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎_ddz泰fw克w新frp闻asew网p版权所有,请勿未授权转载!!!

    public function (){

虎e泰lxpob克d新gsqj闻f_nb网hzab版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎r泰zid克ug新hugwj闻iq网twpts版权所有,请勿未授权转载!!!

    }

虎cldgu泰ivvj克e新darhf闻suoi网y版权所有,请勿未授权转载!!!

}

虎vin泰n克e新nvol闻ie网cfjfh版权所有,请勿未授权转载!!!


虎t泰bzpy克mn新apc闻vlih网wf版权所有,请勿未授权转载!!!

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

虎_egra泰whcf克_新v闻iefb网wbak_版权所有,请勿未授权转载!!!

baseActionindexAcition

虎ifvd泰hd克tdtq新rpwhb闻sd_pz网ub版权所有,请勿未授权转载!!!


虎fhbmj泰wjfgw克nrcm新cc闻smg_网bf_版权所有,请勿未授权转载!!!

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

虎g_fy泰vs克ld新naile闻tafp网oek版权所有,请勿未授权转载!!!

 

虎fog泰nisgu克qsca新dh_闻hl_cf网oi版权所有,请勿未授权转载!!!

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

虎q泰jqzb克qpofc新pqh闻ciw网cpcv版权所有,请勿未授权转载!!!




Erklärung: Alle auf dieser Website wiedergegebenen Artikel /Zeichnungen dienen dem Zweck, mehr Informationen zu übermitteln und die Diskussion zu erleichtern, was nicht bedeutet, dass die Website, der Host und der Veranstalter mit ihren Meinungen einverstanden sind oder die Authentizität ihrer Inhalte bestätigen. Der Inhalt der Artikel dient nur als Referenz. Wenn die Rechte des ursprünglichen Autors verletzt werden, wenden Sie sich bitte an den Verwalter der Website.

Melden Sie sich an

Liste der Kommentare

    Keine Daten