虎泰克博客

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


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

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

虎yhae泰z克f__新cls闻cd网qts_版权所有,请勿未授权转载!!!

 

虎v泰eooe克uh新ttto闻hz网xon版权所有,请勿未授权转载!!!

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

虎qe泰jn克x新ohde闻i网iii版权所有,请勿未授权转载!!!

 

虎koy泰jps克s新qtpkl闻s网u版权所有,请勿未授权转载!!!

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

虎cqaql泰ud克pvcng新vruln闻odmdv网eqnt版权所有,请勿未授权转载!!!

 

虎c泰ib克c新rzfn闻jdju网knjca版权所有,请勿未授权转载!!!

a.php

虎df泰spkbo克o新i_jc闻sko网ua版权所有,请勿未授权转载!!!

class a{

虎llgi泰sq克d新ue闻dl网uxcw版权所有,请勿未授权转载!!!

    function __construct(){

虎rhe泰qzbt克u新rvv闻ncpq网ln版权所有,请勿未授权转载!!!

        echo 'a';

虎ylxn泰zbac克wzhh新l闻vlr网bww版权所有,请勿未授权转载!!!

    }

虎k泰akzrz克wykdk新hdwvm闻onno网srqpr版权所有,请勿未授权转载!!!

}

虎tt泰iq克laeux新fre闻u网q版权所有,请勿未授权转载!!!

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

虎ru泰texlt克vjq新u闻iotn网ut_版权所有,请勿未授权转载!!!

include 'a.php';

虎zy泰tgq克ayk新fd闻havr网sgiz版权所有,请勿未授权转载!!!

class b extends a{

虎hljc泰eqz克zyuii新qip闻egmhs网bbu_版权所有,请勿未授权转载!!!

    function __construct(){

虎pqwcj泰mlbxt克kfb新fl闻iqug网o版权所有,请勿未授权转载!!!

        echo 'b';

虎awob泰jgyzl克cbxu新asu闻iov网v版权所有,请勿未授权转载!!!

    }

虎wko泰jz克zvdf新umoz闻_网bs版权所有,请勿未授权转载!!!

}

虎hx泰bekf克wce新ad闻chrhd网p版权所有,请勿未授权转载!!!

 

虎zog泰gatr克wjb新fks闻_nlse网brzet版权所有,请勿未授权转载!!!

$test=new b();

虎c泰obtz克ddu新kpznl闻mmyc网ih版权所有,请勿未授权转载!!!

运行结果:

虎dsef泰t克phuh新e闻mo网qz版权所有,请勿未授权转载!!!

b

虎rhte泰qvylg克xa新n闻s网ky版权所有,请勿未授权转载!!!


虎j泰apn克as新qoeh闻xkavr网o_pmk版权所有,请勿未授权转载!!!

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

虎o泰fbq克betx新gg闻n网ndj版权所有,请勿未授权转载!!!

 

虎osta泰pis克nsxko新bmyx闻rm网ombk版权所有,请勿未授权转载!!!

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

虎dbwj泰kag克gmsv新fwocn闻l网mafo版权所有,请勿未授权转载!!!

include 'a.php';

虎lbj泰n克eeet新qxghj闻fy网e版权所有,请勿未授权转载!!!

class b extends a{

虎svpz泰m克aqo新jtf闻xapli网tp版权所有,请勿未授权转载!!!

    function __construct(){

虎t_泰t克rjx新oi闻vq网pzcoc版权所有,请勿未授权转载!!!

        parent::__construct();

虎rv泰xpl克euz新o_t闻ej网j版权所有,请勿未授权转载!!!

        echo 'b';

虎xopwe泰lzzt克zucm新sd闻j网raujx版权所有,请勿未授权转载!!!

    }

虎jco泰nc克jiemc新gpi_c闻gpw网cm_版权所有,请勿未授权转载!!!

}

虎eks泰y克dlliu新q闻x网hdn版权所有,请勿未授权转载!!!

 

虎qgqn泰prgas克mqre新fxds闻bl网wymw版权所有,请勿未授权转载!!!

$test=new b();

虎naay泰gf克mjqd新gule_闻wvzn网av版权所有,请勿未授权转载!!!

那么输出结果是:

虎xiu泰qem_c克dx新qienx闻uh网_bq版权所有,请勿未授权转载!!!

ab

虎qkvim泰yrz克ciyxu新gyvnd闻atla网xy版权所有,请勿未授权转载!!!


虎vf泰lk克eja新_y闻ba网argrq版权所有,请勿未授权转载!!!

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

虎xop泰d克ly新ve_闻f网ulpa版权所有,请勿未授权转载!!!

 

虎sdji泰pyle克dvzd_新j闻onftb网hdvqt版权所有,请勿未授权转载!!!

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

虎he泰izj克cbb新zc闻ewaf网kqmc版权所有,请勿未授权转载!!!

 

虎k泰lb克uy新_闻db网leohc版权所有,请勿未授权转载!!!

BaseAction.class.php

虎hd_k泰rqnm克_krf新ia闻h网gcyz_版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎kbst泰ls克xdv新bkmm闻yuqh网tq版权所有,请勿未授权转载!!!

    public function _initialize(){

虎qftkd泰rep克mch新x___闻oli网md版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎ggm泰cjnyq克plj_r新_vlqt闻svhyk网wfby版权所有,请勿未授权转载!!!

    }

虎niqpy泰eo克gz新omt闻de网iylfe版权所有,请勿未授权转载!!!

}

虎t泰vdll克aqolu新pf闻jh网n版权所有,请勿未授权转载!!!


虎rwufj泰u_克hilhc新rnfo_闻b网g版权所有,请勿未授权转载!!!

IndexAction.class.php

虎zi泰fidqf克qzmlz新nnr闻jv网a版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎fuv泰it克n_jc新he闻vhr网ugy版权所有,请勿未授权转载!!!

    public function (){

虎e泰kbz克a新hu闻so网kbq版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎eu泰hxojm克vb新n_kj闻dd网f版权所有,请勿未授权转载!!!

    }

虎milaf泰lq克kcsh新w闻gv网cd版权所有,请勿未授权转载!!!

}

虎ztqvt泰c_yg_克spg_新ng闻fxp网_qws版权所有,请勿未授权转载!!!


虎dyjxw泰f_克lrcd新c闻pusa网hl版权所有,请勿未授权转载!!!

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

虎i泰lkgp克o新nw闻cx网doiz版权所有,请勿未授权转载!!!

baseActionindexAcition

虎zgm泰vrkoz克_m新_闻ufayo网tx版权所有,请勿未授权转载!!!


虎fef泰yi克etj新qau闻ry网kx_版权所有,请勿未授权转载!!!

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

虎kwt泰mnux克mkx新wpw闻lcce网zjw__版权所有,请勿未授权转载!!!

 

虎yrpk泰b克x新djmm闻wpmzq网gv版权所有,请勿未授权转载!!!

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

虎tm泰gzh克jc_zc新mzp闻iox网dkpnr版权所有,请勿未授权转载!!!




Bản phát biểu: tất cả các bản vẽ được in trên trang web là để truyền thêm thông tin và dễ dàng thảo luận, không có nghĩa là website, máy chủ và người cầm đầu đồng ý ý kiến của họ hoặc xác nhận tính xác thực của nội dung của họ. Nội dung các bài báo chỉ có liên quan. Nếu quyền của tác giả gốc bị vi phạm, xin liên lạc với quản trị website.

Ký vào để ghi chú

Ghi chú

    Không có dữ liệu