虎泰克博客

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


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

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

虎hli泰ylut克joy新z闻v网ep版权所有,请勿未授权转载!!!

 

虎veb泰yl克l新ien闻vsser网qvsp版权所有,请勿未授权转载!!!

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

虎qjn泰agg克vfmq新rqp_w闻df网qh版权所有,请勿未授权转载!!!

 

虎d泰yb克m新asr闻mp网rulv版权所有,请勿未授权转载!!!

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

虎saum泰wvmv克bif新x闻sbke网rsuve版权所有,请勿未授权转载!!!

 

虎lc泰_fwm克r新t闻gbk网b版权所有,请勿未授权转载!!!

a.php

虎w_n泰knkyc克a新b闻oleoj网lkiy版权所有,请勿未授权转载!!!

class a{

虎ojv泰yctk克iq新_v闻fvoyr网wesc版权所有,请勿未授权转载!!!

    function __construct(){

虎_x泰a克np新ovi闻_q网fi版权所有,请勿未授权转载!!!

        echo 'a';

虎rd泰eg克dbtf新nzk闻_网jif版权所有,请勿未授权转载!!!

    }

虎kacq泰byxf克nbe新qlovv闻vtmnx网afg_d版权所有,请勿未授权转载!!!

}

虎pwgqy泰y_u克uqkk新sho闻b_网p版权所有,请勿未授权转载!!!

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

虎dz泰io克xlr新etxb闻_gnv网kjo版权所有,请勿未授权转载!!!

include 'a.php';

虎hoawh泰ujocn克yoly新bfqb闻wyrtf网p版权所有,请勿未授权转载!!!

class b extends a{

虎lf泰ww克ddeqa新jcbgr闻vywk网n版权所有,请勿未授权转载!!!

    function __construct(){

虎pzhzk泰jy克_v新cn闻iyeg网ne版权所有,请勿未授权转载!!!

        echo 'b';

虎c_zy泰wct_m克d_q新qlxqy闻p网rgxlf版权所有,请勿未授权转载!!!

    }

虎q泰yz克uou新v闻_k网o版权所有,请勿未授权转载!!!

}

虎yzg泰bn克efi新omcga闻dxgei网ib版权所有,请勿未授权转载!!!

 

虎mmm泰qbx克k新nzohw闻ivrnf网zafk版权所有,请勿未授权转载!!!

$test=new b();

虎iv泰bjcbs克xocmk新xqm闻gs网yi版权所有,请勿未授权转载!!!

运行结果:

虎x泰p克knm新zgkei闻klju网dm版权所有,请勿未授权转载!!!

b

虎goe泰z克ey新tgsff闻fn网_f版权所有,请勿未授权转载!!!


虎zwjhy泰hebxn克inmq新j闻s网kyw版权所有,请勿未授权转载!!!

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

虎goewu泰jdiup克va新mgh闻ohfx网wqylx版权所有,请勿未授权转载!!!

 

虎qi泰nnm克mm新dnwd闻ce网klq版权所有,请勿未授权转载!!!

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

虎amaj泰bt克ph新abvdu闻cf网k版权所有,请勿未授权转载!!!

include 'a.php';

虎f泰pfw克m新bp闻lxi网wrp版权所有,请勿未授权转载!!!

class b extends a{

虎_arq泰li克h新q闻bkjbq网vj版权所有,请勿未授权转载!!!

    function __construct(){

虎c泰t克agdg新bx闻yc_dv网twdf版权所有,请勿未授权转载!!!

        parent::__construct();

虎jk泰ktai克bgyd新u_psx闻l网eayoi版权所有,请勿未授权转载!!!

        echo 'b';

虎iowy泰hltn克fmpj新vswj闻iyshu网pfry版权所有,请勿未授权转载!!!

    }

虎_sfbc泰m克ekb新ga闻mden网v版权所有,请勿未授权转载!!!

}

虎gdyi泰_克td新poc闻ozqxd网b版权所有,请勿未授权转载!!!

 

虎cpaz泰q克uk新b闻kgte网rp版权所有,请勿未授权转载!!!

$test=new b();

虎yhzar泰necs克wg新m闻mvz网nxgq版权所有,请勿未授权转载!!!

那么输出结果是:

虎egnii泰qi克et新zmiz闻nn网h版权所有,请勿未授权转载!!!

ab

虎_nzz泰meg克wvq新rnl闻ks网hy版权所有,请勿未授权转载!!!


虎_ajaz泰y_克npx新po闻new网cwxvl版权所有,请勿未授权转载!!!

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

虎sm_d泰oi克i新wvx闻zc网m版权所有,请勿未授权转载!!!

 

虎k泰qrc克ojr新bqqf闻pjyvu网eygy版权所有,请勿未授权转载!!!

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

虎d泰ipz克wzgg新t闻cal网bu版权所有,请勿未授权转载!!!

 

虎dr泰fauli克m新b闻ymr网_sn版权所有,请勿未授权转载!!!

BaseAction.class.php

虎m_fo泰upvj克f新aa_g闻wo网psyp版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎z_泰h克jeg新uaca闻hp网y版权所有,请勿未授权转载!!!

    public function _initialize(){

虎z泰xt克_wil新nan闻oed网yrnt版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎hfxq泰_d克rfotg新vivtr闻jz网u版权所有,请勿未授权转载!!!

    }

虎rxv泰gjt克peu新yfwne闻ribj网o版权所有,请勿未授权转载!!!

}

虎u泰f_nzq克g新a闻prshm网igizw版权所有,请勿未授权转载!!!


虎v泰jwrub克erxv新kcli闻uxap网_lbfq版权所有,请勿未授权转载!!!

IndexAction.class.php

虎tyorm泰iiig克wse新tcf闻ipj网cgrm版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎vrij泰xf克ye新zo闻ze网tmx版权所有,请勿未授权转载!!!

    public function (){

虎onyib泰xxw克h_clf新hppo闻z网oyxr版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎mgu泰jsea克vqc新o闻ld网c版权所有,请勿未授权转载!!!

    }

虎o_ztf泰p克whd_新yap闻vt网_jlp版权所有,请勿未授权转载!!!

}

虎v泰g克k新cja闻v网d版权所有,请勿未授权转载!!!


虎z_l泰qt克vgv新e闻blu_网l_版权所有,请勿未授权转载!!!

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

虎y泰jw克jcck新ld闻i网_k_tj版权所有,请勿未授权转载!!!

baseActionindexAcition

虎t泰bqwl克vluh新tiu闻nn网dnx版权所有,请勿未授权转载!!!


虎udou泰inw克r新ff_th闻mtc网e版权所有,请勿未授权转载!!!

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

虎cmvy泰fldfi克rddu新xu闻jshi网qjhps版权所有,请勿未授权转载!!!

 

虎h泰l克_d新jtx闻w网ojzl版权所有,请勿未授权转载!!!

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

虎vq泰vdedi克te新km闻ien网o版权所有,请勿未授权转载!!!




Dichiarazione: tutti gli articoli / disegni riprodotti su questo sito web hanno lo scopo di trasmettere più informazioni e facilitare la discussione, il che non significa che il sito web, l'host e l'organizzatore siano d'accordo con le loro opinioni o confermino l'autenticità dei loro contenuti. I contenuti degli articoli sono di riferimento. Se i diritti dell'autore originale sono violati, si prega di contattare l'amministratore del sito web.

Firma per commentare

Commento elenco

    Nessun dato