ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 5741
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎nvh_泰t克gdxn新_ng闻go网j版权所有,请勿未授权转载!!!
虎s泰kba克j新hn_rt闻tfd_e网b_wp版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎axsci泰pyeuu克f新bzu闻o网teh版权所有,请勿未授权转载!!!
虎uy泰dcjkt克ilo新xey闻df网wowb版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎plimg泰hxq克aztw新egen闻g网vb_u版权所有,请勿未授权转载!!!
虎rxlj泰upz克obvy新xicey闻q_e网vi版权所有,请勿未授权转载!!!
a.php
虎wh泰v克nbfpv新d闻z网g版权所有,请勿未授权转载!!!
class a{
虎dz泰x克isvr新ve闻uqkf网rsq版权所有,请勿未授权转载!!!
function __construct(){
虎vli泰dcmtl克nkxr新mz闻eyo网ydyp版权所有,请勿未授权转载!!!
echo 'a';
虎f泰vyjni克klmz新rc闻uxo网sk版权所有,请勿未授权转载!!!
}
虎i泰w克pyztj新wex闻e网h版权所有,请勿未授权转载!!!
}
虎sg泰xeogp克u_新kut_j闻gsub网lszay版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎_edjv泰di克du_新xnik闻_hel网zcow版权所有,请勿未授权转载!!!
include 'a.php';
虎tv泰ulfdr克eab新byxg闻h网fzma版权所有,请勿未授权转载!!!
class b extends a{
虎up泰shnjn克mg新vxlo闻fjwfv网p版权所有,请勿未授权转载!!!
function __construct(){
虎xcs泰hpy克p新u_uh闻wg网hpd版权所有,请勿未授权转载!!!
echo 'b';
虎bajzl泰jwqs克_fgzw新rh闻dasj网m版权所有,请勿未授权转载!!!
}
虎p泰_atyw克j新yp闻ulyio网za版权所有,请勿未授权转载!!!
}
虎dn泰j克t新mn闻in网am版权所有,请勿未授权转载!!!
虎utix泰enngy克k新at_闻m网cvcan版权所有,请勿未授权转载!!!
$test=new b();
虎fnl泰whdhf克rkp新rcrz闻zn网pxc版权所有,请勿未授权转载!!!
运行结果:
虎v泰vt克w新cfpv闻zq_qh网mu版权所有,请勿未授权转载!!!
b
虎yjvfi泰bclqs克towf新oeub闻kb网b版权所有,请勿未授权转载!!!
虎gyy泰mjfyv克nqq新w闻jgpfk网fom版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎omeis泰jitq克zx新lghw闻yumk网ukz版权所有,请勿未授权转载!!!
虎wzas泰exzp克fj新igy闻eb网gxd版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎tieq泰lrvh克avn新ovl闻stadz网rna版权所有,请勿未授权转载!!!
include 'a.php';
虎jbge泰wlppz克uunk新ggjk闻nmp网at版权所有,请勿未授权转载!!!
class b extends a{
虎t泰mrt克qcwy新_zlkz闻qetet网ezx版权所有,请勿未授权转载!!!
function __construct(){
虎dag泰mosh克ia新b闻vi网wjanq版权所有,请勿未授权转载!!!
parent::__construct();
虎ok泰bz克kk新q闻oclfq网xiqug版权所有,请勿未授权转载!!!
echo 'b';
虎nowe泰bs克brh新hu闻tdwz网i版权所有,请勿未授权转载!!!
}
虎b泰afhm克vtdc新crgpa闻omdjb网gkshw版权所有,请勿未授权转载!!!
}
虎rno泰ulq克xdy新unix闻b网_r版权所有,请勿未授权转载!!!
虎_vl泰f克pm新izzfp闻vf网t版权所有,请勿未授权转载!!!
$test=new b();
虎s泰xxsg克zz新abv闻hty网pcm版权所有,请勿未授权转载!!!
那么输出结果是:
虎vy泰k克bk新brbr闻uya网jzd版权所有,请勿未授权转载!!!
ab
虎qbd泰q克nd_c新lgxr闻hzy网ae版权所有,请勿未授权转载!!!
虎lkofa泰mesqk克d新ywe闻t网zri版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎iu泰igskm克t新uhrx闻sgm网jnnh版权所有,请勿未授权转载!!!
虎vuudk泰_ay克fkg新uwbi闻_utog网j版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎_fzza泰lqknq克m新h闻cp_k网_u版权所有,请勿未授权转载!!!
虎w泰l克ptoj新z闻ifuq网ymede版权所有,请勿未授权转载!!!
BaseAction.class.php
虎yihr泰wtst克un新uspzb闻zcnhh网_bl版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎jt泰dnl克xxesv新n闻tiq网vhgf版权所有,请勿未授权转载!!!
public function _initialize(){
虎b泰lf克_bh新s闻jlbi网mt_k版权所有,请勿未授权转载!!!
echo 'baseAction';
虎_byx泰f克qbdh新zl闻t_vw网d版权所有,请勿未授权转载!!!
}
虎tfnv泰fk克t新ro闻ghpbd网ocefk版权所有,请勿未授权转载!!!
}
虎g泰yq克gqs新x闻o网neuy版权所有,请勿未授权转载!!!
虎hsp泰i克u新wnxw闻za网ljk版权所有,请勿未授权转载!!!
IndexAction.class.php
虎xy泰rnavq克rvp新ip闻jhgs网_gl版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎inkk泰c克lisi新ohu闻ssr网zmrf版权所有,请勿未授权转载!!!
public function (){
虎s泰bjnh克s新xtz闻iuz网lkgc版权所有,请勿未授权转载!!!
echo 'indexAction';
虎fnp泰z克quhmo新numh闻vplfz网ydy版权所有,请勿未授权转载!!!
}
虎ikoq泰ttors克fbk新dy闻r_aqs网azk版权所有,请勿未授权转载!!!
}
虎wzp泰slek克srme新ribi闻zceuy网kbpx版权所有,请勿未授权转载!!!
虎pzzxv泰sprke克bye新jo闻mz_网ygc版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎eesd泰fnaie克kvv新n闻avw_m网ofvi版权所有,请勿未授权转载!!!
baseActionindexAcition
虎j泰z克scet新ahgx闻myqwk网k版权所有,请勿未授权转载!!!
虎ut泰p克tbycd新fhnp闻hdmw网ztmeg版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎keten泰mnm克s新qp_闻pvnsi网aqi版权所有,请勿未授权转载!!!
虎qtl泰q克y新yabiw闻ck网j版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎hm_qs泰q克oi新ycbnq闻bnoh网tvh版权所有,请勿未授权转载!!!
Statement: all articles / drawings reproduced on this website are for the purpose of transmitting more information and facilitating discussion, which does not mean that the website, the host and the organizer agree with their opinions or confirm the authenticity of their contents. The contents of the articles are for reference only. If the rights of the original author are violated, please contact the website administrator.
Comment list
-
No data