ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 4016
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎bcgg泰wqm_t克r新el闻j网rfl版权所有,请勿未授权转载!!!
虎arxh泰pn克z新abe闻jfljq网lihd版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎av_nj泰rjm克v新j闻baeb网gq版权所有,请勿未授权转载!!!
虎lhbwp泰udpf克i新arbb闻e网d版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎uxvxr泰ap_克idph新eyipm闻zoh_k网jqbhv版权所有,请勿未授权转载!!!
虎pp泰teo克y新sigui闻re网r版权所有,请勿未授权转载!!!
a.php
虎njg泰vfg克ekixe新wi闻p网cnc版权所有,请勿未授权转载!!!
class a{
虎car泰tqsv克ovec新zv_nz闻ikyo网fyyuv版权所有,请勿未授权转载!!!
function __construct(){
虎uh_mk泰p克w新v闻wqcbe网nh版权所有,请勿未授权转载!!!
echo 'a';
虎g泰q_克vadb新owi闻ftnlk网pte版权所有,请勿未授权转载!!!
}
虎j泰btvr克ciid新oda闻j网hkh版权所有,请勿未授权转载!!!
}
虎a泰zzyxx克lddmk新cx闻wcma网iszix版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎vvfl泰ha克aj新t闻a网sz_ox版权所有,请勿未授权转载!!!
include 'a.php';
虎agxr泰l克fttf新q闻z网gpba版权所有,请勿未授权转载!!!
class b extends a{
虎w泰k_csd克rk新b闻vwfib网ev版权所有,请勿未授权转载!!!
function __construct(){
虎blu泰n_克rhahp新xzz闻ghys网memd版权所有,请勿未授权转载!!!
echo 'b';
虎r泰s克lz新qid闻vgjy网iyr版权所有,请勿未授权转载!!!
}
虎gqby泰_da_克fv新xu闻gswy网tot版权所有,请勿未授权转载!!!
}
虎wx泰wtlpa克h新qmbym闻rted网ovan版权所有,请勿未授权转载!!!
虎y_ax泰c克b新kkk闻gigf网qbj版权所有,请勿未授权转载!!!
$test=new b();
虎swisa泰jxdsd克iw新rmtm闻b_网bsgdl版权所有,请勿未授权转载!!!
运行结果:
虎bd泰y克uf新e闻aezc网setyx版权所有,请勿未授权转载!!!
b
虎e泰lvkhe克nqw新gr闻vifgs网idqo版权所有,请勿未授权转载!!!
虎s泰zluw克jd新owb闻f网lfla版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎lmn泰rq克ai新u闻vosx网le版权所有,请勿未授权转载!!!
虎fcs泰muq克fad新remd闻fbyf网whv版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎fkh泰zqqy克kozpm新o闻nyip网c_版权所有,请勿未授权转载!!!
include 'a.php';
虎xjzhw泰g克fu新wfikz闻u网ief版权所有,请勿未授权转载!!!
class b extends a{
虎ikrgs泰y克t新uo_闻gswjc网_版权所有,请勿未授权转载!!!
function __construct(){
虎b泰juaq克xsn新javre闻muh网q版权所有,请勿未授权转载!!!
parent::__construct();
虎oa泰ovmy克oo新rzn闻rwiw网ldsjz版权所有,请勿未授权转载!!!
echo 'b';
虎ckjk泰dsi_克zysgx新eyu闻yk网t版权所有,请勿未授权转载!!!
}
虎eiuu泰gtww克dkbw新rfv闻vltfd网j版权所有,请勿未授权转载!!!
}
虎b泰uwq克d新z闻quu_s网p版权所有,请勿未授权转载!!!
虎l泰sq克itqmx新qaasc闻dqcz网oho版权所有,请勿未授权转载!!!
$test=new b();
虎vmml泰y克katee新xlto闻z网og版权所有,请勿未授权转载!!!
那么输出结果是:
虎zhxda泰mgh克dz新zt_hv闻dp网lymvd版权所有,请勿未授权转载!!!
ab
虎l泰se克ajeh新zc_rt闻egoe网r_jz版权所有,请勿未授权转载!!!
虎oi泰orua克qw新cqd闻x_dc网ahp版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎msv泰zug克dq新gdg闻onhn网c_p版权所有,请勿未授权转载!!!
虎d泰rwbse克mab新ecgn闻namad网igik版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎ln泰ahb克hgs新ul闻gkh网ywu版权所有,请勿未授权转载!!!
虎dflx泰x克_irj新ruv闻l网owo版权所有,请勿未授权转载!!!
BaseAction.class.php
虎mxhg泰g克fstq新oi闻xt网yzlut版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎kt泰g克fxf新ng闻kn网w版权所有,请勿未授权转载!!!
public function _initialize(){
虎swv泰_bdt克ahowj新npbv闻if网ch_rw版权所有,请勿未授权转载!!!
echo 'baseAction';
虎iiurg泰aef克yteto新d闻islrt网me版权所有,请勿未授权转载!!!
}
虎n泰mr克xe新j闻ypgy网ibhbu版权所有,请勿未授权转载!!!
}
虎gwcj泰p克d新mfhk_闻rfss网odp版权所有,请勿未授权转载!!!
虎rk泰et克snl新igdu闻q网o版权所有,请勿未授权转载!!!
IndexAction.class.php
虎_泰zi克x新rj闻nrpu网h版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎qsv泰w克_新nl闻y网oxdz版权所有,请勿未授权转载!!!
public function (){
虎njy泰vd克xasjc新vuf_k闻_c网tpmg版权所有,请勿未授权转载!!!
echo 'indexAction';
虎p_泰jdha克ygp新_闻bee网efjw版权所有,请勿未授权转载!!!
}
虎rvb泰esic克ghhre新fz闻yfu网dhhfh版权所有,请勿未授权转载!!!
}
虎kfgjm泰rcr克xna新ui闻ib网kqbe版权所有,请勿未授权转载!!!
虎gkqqp泰yrp克vhi新qdeqb闻umly网tz版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎dq泰zvbxm克nlr新t闻h网mcp版权所有,请勿未授权转载!!!
baseActionindexAcition
虎onxr泰pgqqg克zr新v闻cg网u版权所有,请勿未授权转载!!!
虎x泰qf克hqvi新kjij闻pp网g版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎tgpg泰tvthh克ut新gup闻ulo网zxhvo版权所有,请勿未授权转载!!!
虎vxby泰r克ejktn新y闻q网jyyjg版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎umbhn泰ja克hh新b闻daofj网os版权所有,请勿未授权转载!!!
声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。
评论列表
-
暂无数据