虎泰克博客

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


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

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

虎o泰m_克zphfs新bipek闻c网i版权所有,请勿未授权转载!!!

 

虎d泰hj克xq_z新fi闻owjk网soh版权所有,请勿未授权转载!!!

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

虎hk泰bzj克gly新dtsjd闻fttug网q版权所有,请勿未授权转载!!!

 

虎bjqow泰c克ekf新lk闻gsbja网aqig版权所有,请勿未授权转载!!!

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

虎gl泰wd克oiyev新of闻y网ahdy版权所有,请勿未授权转载!!!

 

虎sq_li泰varl克n新t闻yqjsb网jzrg版权所有,请勿未授权转载!!!

a.php

虎wtk泰p_yls克fvb新sc闻pg网nujyc版权所有,请勿未授权转载!!!

class a{

虎qvk泰sjklo克afgfr新ytfuw闻otu网f版权所有,请勿未授权转载!!!

    function __construct(){

虎pvzh泰d克u新hzbpy闻rewo网pt版权所有,请勿未授权转载!!!

        echo 'a';

虎ex泰gr_z克nr新lqj闻v网q版权所有,请勿未授权转载!!!

    }

虎jw_q泰snj克fhpf新aeaj闻gr网yw版权所有,请勿未授权转载!!!

}

虎cdg泰ypsa克wb新f闻b网u_版权所有,请勿未授权转载!!!

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

虎fv泰xm克f新rbaq闻gh网snph版权所有,请勿未授权转载!!!

include 'a.php';

虎gkc泰lcp克n新zonnm闻qbt网_s版权所有,请勿未授权转载!!!

class b extends a{

虎h泰m_克n新bm闻bsma网x版权所有,请勿未授权转载!!!

    function __construct(){

虎mhl泰d克oda_新lvr闻av网lxut版权所有,请勿未授权转载!!!

        echo 'b';

虎wbhx泰_pam克lf新_qmp闻f网v_uvq版权所有,请勿未授权转载!!!

    }

虎yhmx泰umgw克mq_p新npk闻w网bg版权所有,请勿未授权转载!!!

}

虎woegn泰hkvif克etk新ssq闻atssj网_qkbe版权所有,请勿未授权转载!!!

 

虎os泰exvxr克_nsm新e闻aubpo网ad版权所有,请勿未授权转载!!!

$test=new b();

虎elm泰_zkb克eg新wd_mi闻apbq网_dmf版权所有,请勿未授权转载!!!

运行结果:

虎k泰h克dpk新hj闻uwp网onfvz版权所有,请勿未授权转载!!!

b

虎elcs泰v克lxvwr新z闻gn网yq版权所有,请勿未授权转载!!!


虎o_泰gw克uxw新dvulk闻xccl网he版权所有,请勿未授权转载!!!

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

虎yfeu泰yw克mqnfm新ypz闻hcerj网u版权所有,请勿未授权转载!!!

 

虎yvux泰ootqt克jhbni新wuqf闻cssla网km版权所有,请勿未授权转载!!!

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

虎qecq泰csh克fjsys新rnz闻n_cts网toz版权所有,请勿未授权转载!!!

include 'a.php';

虎sdjaf泰fn克hzq新amsxd闻ohqoh网yhzx版权所有,请勿未授权转载!!!

class b extends a{

虎wjt泰ws克wxsc新so_ve闻co网okapz版权所有,请勿未授权转载!!!

    function __construct(){

虎gdiir泰dwih克yxq新qy闻hcb网fcx版权所有,请勿未授权转载!!!

        parent::__construct();

虎b泰ncs克l新lug闻xv网kcteq版权所有,请勿未授权转载!!!

        echo 'b';

虎jvho泰lt克izc新rts闻pp网jsx版权所有,请勿未授权转载!!!

    }

虎fsgvn泰neggz克bstbr新dklpf闻qvy网y版权所有,请勿未授权转载!!!

}

虎lzdbu泰beh克csm新jxc闻zl网jok版权所有,请勿未授权转载!!!

 

虎iypio泰q克djz新sc闻q_xlv网b版权所有,请勿未授权转载!!!

$test=new b();

虎ezgb泰non克nhf新_闻tayu_网nsl版权所有,请勿未授权转载!!!

那么输出结果是:

虎u泰bktlo克don新n闻a网rjs版权所有,请勿未授权转载!!!

ab

虎dh泰ei_a克uws新g闻cvda网aj版权所有,请勿未授权转载!!!


虎fj泰znqj克ng新h闻x_网epbs版权所有,请勿未授权转载!!!

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

虎rq泰nhk_克kmowa新liaph闻pq网ymmzi版权所有,请勿未授权转载!!!

 

虎y_d泰gqcoz克guu新uo闻u网ep_版权所有,请勿未授权转载!!!

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

虎zorjg泰asj克ao新kvqvh闻bbl网gykg版权所有,请勿未授权转载!!!

 

虎bd泰hwlsl克_joq新pc闻w网q版权所有,请勿未授权转载!!!

BaseAction.class.php

虎ayq泰gola克_jwb新xho闻tp网fcyg版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎xokcx泰j克ihwa新fcx_闻am网rzy版权所有,请勿未授权转载!!!

    public function _initialize(){

虎o泰jcrp克e新nli闻t网o_wjc版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎gqjx泰dne克ktmt新_ujg闻wkt网nlrc版权所有,请勿未授权转载!!!

    }

虎gcak泰spaaf克gpf新zf闻pasu网invs版权所有,请勿未授权转载!!!

}

虎kvwij泰ujwm克sjoa新uwsx闻cio网yzp版权所有,请勿未授权转载!!!


虎me泰ku克m新t闻bfb网mdyhq版权所有,请勿未授权转载!!!

IndexAction.class.php

虎co泰mrm克sqj新e闻m网pzfwo版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎q泰qyo克yhxks新frio闻j网qdafp版权所有,请勿未授权转载!!!

    public function (){

虎n泰jbzau克y_iyg新mnl闻txn网m版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎fw泰mr克agdi新fdn闻fk网da版权所有,请勿未授权转载!!!

    }

虎w泰oieyx克_ba新kbigo闻a网ctijr版权所有,请勿未授权转载!!!

}

虎bu泰uh克pfidk新r闻iblh网sfm版权所有,请勿未授权转载!!!


虎pb泰lxwel克a新aigt闻u_网j版权所有,请勿未授权转载!!!

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

虎wq泰wwza克lg新r闻rf网io版权所有,请勿未授权转载!!!

baseActionindexAcition

虎nwk泰amten克b新pzqul闻hsz网wgrln版权所有,请勿未授权转载!!!


虎_cyyd泰yxfrs克fvnf新i闻x_网mmvxw版权所有,请勿未授权转载!!!

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

虎_mqj泰ury克beip新sn闻clx网vmf_g版权所有,请勿未授权转载!!!

 

虎bpodu泰z_克b新mnh闻u网xnkc版权所有,请勿未授权转载!!!

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

虎oonya泰rh克mhqd新msyos闻givc网gppj版权所有,请勿未授权转载!!!




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