虎泰克博客

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


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

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

虎n泰f克rfqmx新y闻xd网eg_bh版权所有,请勿未授权转载!!!

 

虎jk泰vk克sowy新lyc闻ner网wj版权所有,请勿未授权转载!!!

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

虎sntbc泰isg克rkj新ujp_t闻if网par版权所有,请勿未授权转载!!!

 

虎_n泰vkfil克gh新adx闻r_网pu版权所有,请勿未授权转载!!!

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

虎_mjwu泰ldfa克q新t闻os网e版权所有,请勿未授权转载!!!

 

虎dzkaa泰_wd克wog新i闻u网xb_l版权所有,请勿未授权转载!!!

a.php

虎hsz泰bcx克s新de闻dost网stlst版权所有,请勿未授权转载!!!

class a{

虎tnbf泰lrue克pbn新wra闻hsyqr网juo版权所有,请勿未授权转载!!!

    function __construct(){

虎ugzv泰tiep克kp新xs闻al网yz版权所有,请勿未授权转载!!!

        echo 'a';

虎ipxiz泰kd克f新mw闻ifl网b版权所有,请勿未授权转载!!!

    }

虎ee泰kojfy克y新qxb闻g网eh版权所有,请勿未授权转载!!!

}

虎gun泰idba克ycw新upki闻g网yol版权所有,请勿未授权转载!!!

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

虎d泰dsloe克mu新xflm闻tbi_v网cmc版权所有,请勿未授权转载!!!

include 'a.php';

虎b泰s克nrtsw新vfqaw闻elm网jnagu版权所有,请勿未授权转载!!!

class b extends a{

虎r泰bk克gjx新f闻ta网lo版权所有,请勿未授权转载!!!

    function __construct(){

虎seao泰_dyd克oc新ibhh闻l网cu版权所有,请勿未授权转载!!!

        echo 'b';

虎ksm泰xqufw克pf新m闻hm网w版权所有,请勿未授权转载!!!

    }

虎_bb泰ahmf克z新isw闻zmdw网ryiz版权所有,请勿未授权转载!!!

}

虎zelxy泰uldgy克d新ijdxx闻_o网bgqu版权所有,请勿未授权转载!!!

 

虎biqc_泰abed克wsfn新u闻aqmb网sfzk版权所有,请勿未授权转载!!!

$test=new b();

虎vmxj泰a克f_g新ldqix闻qwt网ngzx版权所有,请勿未授权转载!!!

运行结果:

虎pw泰wshdd克f新dmn闻kipwq网umlb版权所有,请勿未授权转载!!!

b

虎zv_hd泰ip克jbt_新m闻iwje网dbtrp版权所有,请勿未授权转载!!!


虎ybk泰s克qpuip新woug闻a网s版权所有,请勿未授权转载!!!

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

虎cw泰m_克hlgz新s闻rd网ctc版权所有,请勿未授权转载!!!

 

虎csmoi泰knxca克qms新j闻lg网jhfu版权所有,请勿未授权转载!!!

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

虎tfx泰sl克j新ro闻izizu网r版权所有,请勿未授权转载!!!

include 'a.php';

虎yv泰r克k_nnm新qq闻gg网w版权所有,请勿未授权转载!!!

class b extends a{

虎ffj泰tp克q_oe新cutz闻fcn网pp版权所有,请勿未授权转载!!!

    function __construct(){

虎g泰a克x新qqlth闻yuabn网opftw版权所有,请勿未授权转载!!!

        parent::__construct();

虎wrrwz泰tsquh克wg新lcmfw闻y网eq版权所有,请勿未授权转载!!!

        echo 'b';

虎oaqkr泰hh克im新vkbxy闻otyjd网pc版权所有,请勿未授权转载!!!

    }

虎kkjh泰ggqyl克mylwy新uzzgx闻tqa_o网s版权所有,请勿未授权转载!!!

}

虎spe泰jcct克s新py闻kjdqf网_he版权所有,请勿未授权转载!!!

 

虎c泰sylv克nfccz新j闻c网hdkjf版权所有,请勿未授权转载!!!

$test=new b();

虎ezgxt泰kdovj克klgi新dl_f闻lvnz网ksblq版权所有,请勿未授权转载!!!

那么输出结果是:

虎e_r_q泰mbd克q新zzh闻i网iu版权所有,请勿未授权转载!!!

ab

虎hsjux泰xve克a_au新ea闻_afqy网x版权所有,请勿未授权转载!!!


虎lgkj泰h克krrdk新tgkz_闻ovebm网elj版权所有,请勿未授权转载!!!

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

虎vx泰pk克mwhaf新po闻bn网nqd版权所有,请勿未授权转载!!!

 

虎o泰_bmw克d新hsdls闻j网vzih版权所有,请勿未授权转载!!!

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

虎psw泰qx克byh新si闻dd网wtgy版权所有,请勿未授权转载!!!

 

虎zgsxi泰flolq克_yb_m新fz闻tioe网awm_j版权所有,请勿未授权转载!!!

BaseAction.class.php

虎nywj泰jt克p新hv闻wpzv网tcga版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎elmvp泰yswj克lxh新oa闻yzec网jzgtf版权所有,请勿未授权转载!!!

    public function _initialize(){

虎bi泰yv克tj新whljy闻uwlma网dr版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎zuut泰nk克d新ktq闻o网rwqek版权所有,请勿未授权转载!!!

    }

虎dbdo泰ul克nwev新rtxk闻q网n版权所有,请勿未授权转载!!!

}

虎g泰_w克rx新zimz闻rs网tny版权所有,请勿未授权转载!!!


虎eui泰yfh克mq新h闻vcsco网gl版权所有,请勿未授权转载!!!

IndexAction.class.php

虎sdke泰pv克n新dpwhv闻z网ux版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎bq泰bu克z新xwzvq闻xxg网a版权所有,请勿未授权转载!!!

    public function (){

虎lupil泰ddibx克hamhl新zhzdz闻k网ydsk版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎yqpc泰mw克vogvq新k_iii闻ghzhl网oapch版权所有,请勿未授权转载!!!

    }

虎ug泰np克hexw新kxzs闻ejfa网vnnb版权所有,请勿未授权转载!!!

}

虎bbl泰g克ala新__c闻inx网maq版权所有,请勿未授权转载!!!


虎h泰sv克accn新getea闻cnbal网fhhb版权所有,请勿未授权转载!!!

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

虎lcdy泰gk克rwkc新bnd闻rpgc网stqx版权所有,请勿未授权转载!!!

baseActionindexAcition

虎hc泰yz克mmqdk新hruh闻nd网ac_b版权所有,请勿未授权转载!!!


虎xdglk泰l克_新za闻dbl网hbd版权所有,请勿未授权转载!!!

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

虎su泰tml克c新itbn闻ffm网cq版权所有,请勿未授权转载!!!

 

虎odm泰najwu克z新hu闻ca网qxgaa版权所有,请勿未授权转载!!!

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

虎elz泰yoq克co新lfj闻xjzqs网eiae版权所有,请勿未授权转载!!!




Declaración: los textos que se reproducen en la red, como textos / gráficos, tienen por objeto transmitir más información y facilitar las deliberaciones, y no implican que el sitio y los patrocinadores o patrocinadores compartan sus opiniones o confirmen la autenticidad de su contenido, que sólo es de carácter informativo y que si se violan los derechos de los autores originales, por favor se pongan en contacto con el Administrador del sitio web.

Gracias por tu comentario.

Lista de comentarios

    Datos no disponibles