虎泰克博客

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


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

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

虎r泰nr克iwfm新g闻lfhja网wbq版权所有,请勿未授权转载!!!

 

虎bgw泰kfcb克kkj新wf_闻sa网pgvos版权所有,请勿未授权转载!!!

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

虎vhi泰jovq克gco新ykrv闻xkulu网f_mnm版权所有,请勿未授权转载!!!

 

虎a泰ve克xvit_新ncqyq闻pystf网gsyn版权所有,请勿未授权转载!!!

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

虎iv泰ct_h克k新jknu闻e网o版权所有,请勿未授权转载!!!

 

虎c泰_克swbq新qxnqx闻y网pbhcd版权所有,请勿未授权转载!!!

a.php

虎sv泰z克auu新s闻vvqz网q版权所有,请勿未授权转载!!!

class a{

虎ktgfj泰gzy克oc新maa闻tb网aybnp版权所有,请勿未授权转载!!!

    function __construct(){

虎ebzl泰lylo_克yvhn新kvxgt闻oteu网nypte版权所有,请勿未授权转载!!!

        echo 'a';

虎wfdz泰cyy克zc新n闻w网_版权所有,请勿未授权转载!!!

    }

虎pc泰ilr克enrgb新ml闻h网uhu版权所有,请勿未授权转载!!!

}

虎oh泰g克d_新z闻gnwbe网xbfdk版权所有,请勿未授权转载!!!

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

虎ts泰rxokr克k_ab新ld闻qepdi网sflnu版权所有,请勿未授权转载!!!

include 'a.php';

虎tqzyb泰xohl克uvs新fg闻r网olhq版权所有,请勿未授权转载!!!

class b extends a{

虎hp泰dp克pt新gqgxo闻fd网ck版权所有,请勿未授权转载!!!

    function __construct(){

虎rcphe泰ufy克llz新w闻rxjeq网lx版权所有,请勿未授权转载!!!

        echo 'b';

虎z泰mhbfd克uu新ejstz闻xt_b网yp版权所有,请勿未授权转载!!!

    }

虎kh泰chrgw克iuw新_rxb闻i网owcb版权所有,请勿未授权转载!!!

}

虎ppk泰n克r新orcej闻mtmoi网eatl版权所有,请勿未授权转载!!!

 

虎i泰brsqj克dguw新ck闻mvpmk网bv版权所有,请勿未授权转载!!!

$test=new b();

虎j泰wfox克bew新z闻m网l版权所有,请勿未授权转载!!!

运行结果:

虎vsng泰l_克v新xh闻g_y网a版权所有,请勿未授权转载!!!

b

虎qaiqd泰lwnwb克k新geb闻nlzp网i版权所有,请勿未授权转载!!!


虎hc泰t克aig新_n闻ntdo网np版权所有,请勿未授权转载!!!

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

虎zzlj泰avb克_np新s闻z网q_mzo版权所有,请勿未授权转载!!!

 

虎nu泰ja克eloz新gfv闻w网npgqx版权所有,请勿未授权转载!!!

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

虎whlk泰gaag克vkh新aip闻a网bnqxa版权所有,请勿未授权转载!!!

include 'a.php';

虎thplz泰r克p新n闻mygqt网bjf版权所有,请勿未授权转载!!!

class b extends a{

虎_n泰pmdc克izek新grqpv闻h网wmlo版权所有,请勿未授权转载!!!

    function __construct(){

虎yoh泰bkdlm克nsf新ss闻ny网uxmbm版权所有,请勿未授权转载!!!

        parent::__construct();

虎kvm泰aqtmh克hdp新ms_闻kji网oo版权所有,请勿未授权转载!!!

        echo 'b';

虎uheie泰keofd克owrp_新ywf闻bxvcy网bh版权所有,请勿未授权转载!!!

    }

虎zxs泰dkghu克ese新_isb闻koqjs网ck版权所有,请勿未授权转载!!!

}

虎mx泰wfat克xmm新r闻mm网yf_hz版权所有,请勿未授权转载!!!

 

虎l泰bneh克p新iv_ha闻gkb网plwrd版权所有,请勿未授权转载!!!

$test=new b();

虎oouji泰vn克r新efin闻dbp网wk版权所有,请勿未授权转载!!!

那么输出结果是:

虎zvi_f泰_jk克uo新bzuxo闻ikka网j版权所有,请勿未授权转载!!!

ab

虎ge泰f克otq新ty闻hepym网qsz版权所有,请勿未授权转载!!!


虎iwnxq泰isene克zxt新gjjv闻olne网pxcpq版权所有,请勿未授权转载!!!

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

虎yh泰gxnd克c新pk闻rfj网ez版权所有,请勿未授权转载!!!

 

虎voca泰tthy克ln新w闻ci网knsk版权所有,请勿未授权转载!!!

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

虎vzndg泰rvntn克nagl新k闻qut网ujd版权所有,请勿未授权转载!!!

 

虎np泰gs克sx新idg闻cuo网_vutd版权所有,请勿未授权转载!!!

BaseAction.class.php

虎bcemo泰i克_z新msuya闻bihe网mbqr版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎n_h泰zz_c克assrk新toe闻h网nz_版权所有,请勿未授权转载!!!

    public function _initialize(){

虎l_泰mmoil克wuocv新au闻fhtgb网wk版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎hhqhx泰ksvv克ntpu新hx闻hv_zc网z版权所有,请勿未授权转载!!!

    }

虎imbr泰a克y新fb_po闻bbdp_网av版权所有,请勿未授权转载!!!

}

虎w泰_s克b新l闻uy网kq版权所有,请勿未授权转载!!!


虎ggslu泰t克q新z闻rh网azo版权所有,请勿未授权转载!!!

IndexAction.class.php

虎kbpsa泰sgsv克mxdq新q闻m网gum版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎jxte泰ewl克g新oqdl闻yz网wxcr版权所有,请勿未授权转载!!!

    public function (){

虎p泰d克htqfi新tz闻zxkz网sn版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎c泰idd_克txxsk新jo闻o网l版权所有,请勿未授权转载!!!

    }

虎t泰m_克i新rfqsy闻erev网oxw版权所有,请勿未授权转载!!!

}

虎k泰zi克pnxs新fxuo闻robh网vvzsd版权所有,请勿未授权转载!!!


虎wgywv泰rnjn克obq新ibgl闻nlx网xus版权所有,请勿未授权转载!!!

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

虎zkfh泰f_ust克kdypg新wkw闻_k网r版权所有,请勿未授权转载!!!

baseActionindexAcition

虎_泰wggc克kqub新i闻qyh网xj_版权所有,请勿未授权转载!!!


虎wwuzt泰rf克ua新xikfi闻wb网kdws版权所有,请勿未授权转载!!!

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

虎i泰p克kazl新jms闻rdw网_ufx版权所有,请勿未授权转载!!!

 

虎_af泰dn_r克de新qfr闻s_yog网ej版权所有,请勿未授权转载!!!

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

虎_qbw泰j克at新i闻ehbh网l版权所有,请勿未授权转载!!!




ถ้าคุณมีข้อมูลอื่นๆใดๆเกี่ยวกับเรื่องนี้กรุณาเพิ่มฟรี

เข้าสู่ระบบเพื่อแสดงความคิดเห็น

แสดงความคิดเห็น

    ไม่มีข้อมูล