ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 4003
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎gm泰vz克u新bivq闻md网whs版权所有,请勿未授权转载!!!
虎aahc泰rr克_m_gm新m闻dq网hpyd版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎p泰zcc克qo新e闻elgnw网y版权所有,请勿未授权转载!!!
虎menh泰nlgf克ycvf新t闻qvdpq网qyqcj版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎nn泰ut克fl新rjx闻_rx网hz版权所有,请勿未授权转载!!!
虎q泰xr克kk新injk闻a_网q版权所有,请勿未授权转载!!!
a.php
虎tg泰c_c克ucz新btm闻lbqxo网qlfn版权所有,请勿未授权转载!!!
class a{
虎vi泰g克h新vw闻wwntr网kqcqo版权所有,请勿未授权转载!!!
function __construct(){
虎k泰le克r新uzhvs闻wkyg网opm版权所有,请勿未授权转载!!!
echo 'a';
虎xtxzx泰jgsw克c新cnuz闻sgy网wmbb版权所有,请勿未授权转载!!!
}
虎tadaz泰xh克f新ymfd闻_ygb网ka版权所有,请勿未授权转载!!!
}
虎zd泰k克tg新arene闻bkh网w版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎ivcq泰g_j克zp新oqhg闻rm网eht版权所有,请勿未授权转载!!!
include 'a.php';
虎ssfu泰of_t克yh新zirgx闻mbyg网ypogf版权所有,请勿未授权转载!!!
class b extends a{
虎dnl泰nlpon克ril新brx闻gnle网_zfny版权所有,请勿未授权转载!!!
function __construct(){
虎ncvid泰gdog克omha新vj闻ihg_r网tpwbj版权所有,请勿未授权转载!!!
echo 'b';
虎pv泰zwh克mg新eame闻qrfls网yneh版权所有,请勿未授权转载!!!
}
虎punnk泰ak克mixe新u闻ppm网ttuaj版权所有,请勿未授权转载!!!
}
虎apx泰aye克ox新yngdx闻ctklp网bndtw版权所有,请勿未授权转载!!!
虎vt泰v克phvd新j闻ao网_jp版权所有,请勿未授权转载!!!
$test=new b();
虎k泰vrsjd克oy_qe新kwkfv闻_ne网chtt版权所有,请勿未授权转载!!!
运行结果:
虎q泰derp克qghuz新eeas闻bdp网kg版权所有,请勿未授权转载!!!
b
虎ah泰blkgq克m新fzv闻b_xk网su版权所有,请勿未授权转载!!!
虎kti泰ku克vq新tiq闻nk网m版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎v泰volj克_bd新nx闻pwhra网cg版权所有,请勿未授权转载!!!
虎f泰zwfv克c新jexu闻gfn网iev版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎gxe泰i_pmo克eeizl新t闻whj网z_版权所有,请勿未授权转载!!!
include 'a.php';
虎_jy泰o克pj新z闻mlw网dxun版权所有,请勿未授权转载!!!
class b extends a{
虎fjtzf泰i克fygqq新n_g闻igjrr网k版权所有,请勿未授权转载!!!
function __construct(){
虎bsdr泰c克u_x新oqx闻tj_sz网cyq版权所有,请勿未授权转载!!!
parent::__construct();
虎guyni泰xjyb克tb新rrdd闻opskh网y版权所有,请勿未授权转载!!!
echo 'b';
虎voq泰dk克i新lm闻cmw网t版权所有,请勿未授权转载!!!
}
虎nlmt泰trzmk克nfcy新h闻a网m版权所有,请勿未授权转载!!!
}
虎dnzu_泰cdtam克f新kvr闻qm网nn版权所有,请勿未授权转载!!!
虎y泰h克otdyg新nqly闻fw网j_z_版权所有,请勿未授权转载!!!
$test=new b();
虎hbbam泰pktf克krm新i闻b网buux版权所有,请勿未授权转载!!!
那么输出结果是:
虎qa泰mkmzq克dvl新cq闻i网_s版权所有,请勿未授权转载!!!
ab
虎h泰ga克ccmt新z闻t网ckv版权所有,请勿未授权转载!!!
虎hf泰s克p_e新imn闻gcgvf网s版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎yfn泰e克dys新zan闻w网njzns版权所有,请勿未授权转载!!!
虎temc泰op克ll新aqfp闻u网y版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎v泰vei克vxbt新sv_闻_网k_q版权所有,请勿未授权转载!!!
虎odka泰ypb克c_j新wwttg闻bf_ii网eto版权所有,请勿未授权转载!!!
BaseAction.class.php
虎hoyzx泰t克ek新j闻_网pyl版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎zt泰tz_克jdn新r闻g网ebdl版权所有,请勿未授权转载!!!
public function _initialize(){
虎_泰epj_o克c新ags闻sy网w版权所有,请勿未授权转载!!!
echo 'baseAction';
虎izd泰ojbrz克c新bhpd闻urh网e版权所有,请勿未授权转载!!!
}
虎tksw泰jrik克dwwtr新p闻dww网vhjhg版权所有,请勿未授权转载!!!
}
虎kuzy泰pl克zvem新q_ig闻ycv网tw版权所有,请勿未授权转载!!!
虎z泰qs克cokt新wwqs闻uroz网ds版权所有,请勿未授权转载!!!
IndexAction.class.php
虎tpy_泰cu_vx克icqr新rpc闻xr网bhrbj版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎crdo泰fvi克i新o闻n网u版权所有,请勿未授权转载!!!
public function (){
虎kb泰h克zd新cwmoz闻lymwg网al版权所有,请勿未授权转载!!!
echo 'indexAction';
虎qm泰u克qqz新elh闻v网wsxfp版权所有,请勿未授权转载!!!
}
虎wks泰_tasq克u新jfg闻lbghf网k版权所有,请勿未授权转载!!!
}
虎z_ew泰wz_克y新na闻tm网iyqk版权所有,请勿未授权转载!!!
虎dnt泰brcc克c新r_闻w网lqcls版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎k泰ww克q新qnq闻jvul网h版权所有,请勿未授权转载!!!
baseActionindexAcition
虎sqbx泰us克xq新nq闻w网kp版权所有,请勿未授权转载!!!
虎sqkgz泰k克s新am闻kl网fxe版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎fybwp泰rkof克lux新cbv闻u网att版权所有,请勿未授权转载!!!
虎bauot泰ulpmw克jpksv新ksoc闻b_mtw网opro版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎hbqxo泰idlva克i_ap新b闻ykfq网wve版权所有,请勿未授权转载!!!
من أجل نقل المزيد من المعلومات و تيسير المناقشة ، لا يعني أن الموقع و منظم و المقاول يوافق على وجهة نظره أو يؤكد أصالة محتوياته ، هذه المادة هي للإشارة فقط ، إذا كان انتهاك حقوق المؤلف الأصلي ، يرجى الاتصال بمسؤول الموقع
قائمة التعليقات
-
بيانات مؤقتة