虎泰克博客

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


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

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

虎eng泰ts克_ou_新izrok闻qjfao网ufxg版权所有,请勿未授权转载!!!

 

虎tv泰ns克g新fliy闻rug网qo版权所有,请勿未授权转载!!!

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

虎_jmth泰dssav克s新f_q闻dpaek网d版权所有,请勿未授权转载!!!

 

虎_ntvj泰f克o新l闻qcawk网upshy版权所有,请勿未授权转载!!!

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

虎kwmq泰tmz克p新yvk闻yb网kw版权所有,请勿未授权转载!!!

 

虎dkynl泰cre克yhse新_闻fje网y版权所有,请勿未授权转载!!!

a.php

虎cvqc泰wku_d克oz新gmktw闻fvg网ops版权所有,请勿未授权转载!!!

class a{

虎_泰uisb_克zbv新tbvmp闻l网cm版权所有,请勿未授权转载!!!

    function __construct(){

虎kavsu泰i克qbx新_闻r网ply版权所有,请勿未授权转载!!!

        echo 'a';

虎iej泰nbtg克op新lxk闻nlv网ek版权所有,请勿未授权转载!!!

    }

虎czru_泰m克laa新jsj闻mxyc网n版权所有,请勿未授权转载!!!

}

虎gi泰tfue克qimcb新t闻bqpc网uw_版权所有,请勿未授权转载!!!

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

虎lhm泰gxj克ww新lt闻twnhe网wlac版权所有,请勿未授权转载!!!

include 'a.php';

虎lsj泰edp_克exxwm新yzudv闻rvgfn网j版权所有,请勿未授权转载!!!

class b extends a{

虎xykp泰c_pvt克ibvq新tuol闻_grv网zozha版权所有,请勿未授权转载!!!

    function __construct(){

虎kwy泰cgud克r新my闻h网gecjm版权所有,请勿未授权转载!!!

        echo 'b';

虎ohfk_泰gpe克sho_新nlyuz闻fg网g版权所有,请勿未授权转载!!!

    }

虎p泰kfz克l新ynp闻lpule网ns版权所有,请勿未授权转载!!!

}

虎roj泰gag克hbd新ttq闻nex网a_v版权所有,请勿未授权转载!!!

 

虎fehq泰hgrj克ftxt新cuzh闻s_ns网eeufu版权所有,请勿未授权转载!!!

$test=new b();

虎p泰qtgj克jy新pjs闻vt网p版权所有,请勿未授权转载!!!

运行结果:

虎sth泰_fxbg克nh新y闻t网kmd版权所有,请勿未授权转载!!!

b

虎g泰n克tjrie新jq闻k网we版权所有,请勿未授权转载!!!


虎zzc泰l克bdsl新e闻ug_o网f版权所有,请勿未授权转载!!!

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

虎dnbs_泰w克whkf新h_闻p网wj版权所有,请勿未授权转载!!!

 

虎egzbe泰p克vb新hva闻cqh网w版权所有,请勿未授权转载!!!

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

虎p泰xuvjt克bxmv新rqo闻csd网y版权所有,请勿未授权转载!!!

include 'a.php';

虎daip泰gq克_rj新kbffm闻t网k版权所有,请勿未授权转载!!!

class b extends a{

虎cmmef泰sw克dw新b__j闻k网moomi版权所有,请勿未授权转载!!!

    function __construct(){

虎ycyf泰lifkq克_td新_闻g网zav_版权所有,请勿未授权转载!!!

        parent::__construct();

虎umd泰n克nchv新y闻drbhv网e版权所有,请勿未授权转载!!!

        echo 'b';

虎ijv泰riomk克wo新t_z闻kma网srw版权所有,请勿未授权转载!!!

    }

虎iux泰jjz克q新w闻ovzjy网w版权所有,请勿未授权转载!!!

}

虎yll泰vu克vv新uu闻tgc网xwl版权所有,请勿未授权转载!!!

 

虎v泰zrteu克tlsl新nkpbp闻tk网rp__版权所有,请勿未授权转载!!!

$test=new b();

虎z泰x克qfgs新_kdea闻tj_m网uehsx版权所有,请勿未授权转载!!!

那么输出结果是:

虎l泰gcoy克n新mdirc闻nmfll网_ud版权所有,请勿未授权转载!!!

ab

虎jdca泰tcou克hh新ucyq闻qzfhi网knreu版权所有,请勿未授权转载!!!


虎whf泰bw克kgwor新uzslu闻ovv网yrsh版权所有,请勿未授权转载!!!

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

虎eys泰qiki克euhx新a闻qjxyb网pvk版权所有,请勿未授权转载!!!

 

虎cwxdl泰co克nh新wnbgk闻_z网f版权所有,请勿未授权转载!!!

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

虎dww泰ltp克b新dpb闻pcfa网jaqn版权所有,请勿未授权转载!!!

 

虎a泰r克hq新b闻r网hjbim版权所有,请勿未授权转载!!!

BaseAction.class.php

虎o_gui泰x克of新nu闻y网k_版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎iw泰yynvt克vy新k闻gwflp网nagh版权所有,请勿未授权转载!!!

    public function _initialize(){

虎_pqt泰np克fbclj新hsdd闻igv网morev版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎zbkt泰g克_keb新cqkzc闻yqyuh网iygkh版权所有,请勿未授权转载!!!

    }

虎yd泰jxa克n新lnsan闻hsk网mgd版权所有,请勿未授权转载!!!

}

虎mmpp泰c克n新roip闻f网wb版权所有,请勿未授权转载!!!


虎_sg泰rfti克gt新pyfh闻guwgc网ko版权所有,请勿未授权转载!!!

IndexAction.class.php

虎een泰ooj克fy新xp闻kjxe网ximgw版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎pavhe泰iv克mj新wgis闻unw网vd版权所有,请勿未授权转载!!!

    public function (){

虎zfk泰_mzgx克b新tchb闻uh网pp版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎x泰v克kbkiu新n闻pv网vweqs版权所有,请勿未授权转载!!!

    }

虎iwypp泰f克rzx新y闻p网mhjcc版权所有,请勿未授权转载!!!

}

虎n泰fq克vqpk新syyqo闻tl网fa_lb版权所有,请勿未授权转载!!!


虎_o泰w克pa新hbw闻s网f版权所有,请勿未授权转载!!!

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

虎yxf泰jz克bp新qaso闻mf_网xuts版权所有,请勿未授权转载!!!

baseActionindexAcition

虎nez泰ne克iub_新awak闻u网rv版权所有,请勿未授权转载!!!


虎bgai泰ecpmv克gfwl_新dgnbg闻cje网_版权所有,请勿未授权转载!!!

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

虎pawl泰cdd克_p新yag闻k网w版权所有,请勿未授权转载!!!

 

虎cvce泰buwy克c_m新erwj闻v网kq版权所有,请勿未授权转载!!!

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

虎ny泰spg克dkcpo新_zklj闻ae网tsas版权所有,请勿未授权转载!!!




Lausunto: kaikki tällä sivustolla olevat artikkelit / piirrokset on tarkoitus välittää enemmän tietoa ja helpottaa keskustelua, mikä ei tarkoita sitä, että sivusto, isäntä ja järjestäjä ovat samaa mieltä heidän mielipiteistään tai vahvistaa niiden sisällön aitoutta. Artikkelien sisältö on tarkoitettu ainoastaan viitteeksi. Jos alkuperäisen tekijän oikeuksia rikotaan, ota yhteyttä verkkosivuston ylläpitäjään.

Allekirjoitus ja kommentti

Kommenttien luettelo

    Ei tietoja