ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 3153
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎cr泰m克kupdr新u闻bjm网o版权所有,请勿未授权转载!!!
虎ahfgm泰hgap克pxapp新zagl闻n网vzjk版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎oihnv泰wg克ag新wufdf闻rds网ibgj版权所有,请勿未授权转载!!!
虎gwya_泰_i克hp新uoc闻nb网f版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎cz泰uzkrr克guxy新ji_闻wfx网sbhje版权所有,请勿未授权转载!!!
虎jijqa泰k克gm新ifzg闻fw网ttdw版权所有,请勿未授权转载!!!
a.php
虎egp泰fbao克kjbk新_tpfc闻gmjl网_v_版权所有,请勿未授权转载!!!
class a{
虎nd泰v克_w新oosi闻_dszh网r_at版权所有,请勿未授权转载!!!
function __construct(){
虎g泰nbckp克xg新sgos闻of网pmjp版权所有,请勿未授权转载!!!
echo 'a';
虎nogmn泰lkq克io新pjadp闻y_网kdji版权所有,请勿未授权转载!!!
}
虎v泰d克jhwr新bopr闻qjtg网q版权所有,请勿未授权转载!!!
}
虎pqli泰zokf克blg新oib闻miejv网_v_i版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎hjv泰n_u克aope新hr闻net网_版权所有,请勿未授权转载!!!
include 'a.php';
虎qptgm泰hh克g新iimp闻jgmo网a_aaf版权所有,请勿未授权转载!!!
class b extends a{
虎lxq泰kao克owm新im闻wbpm网c版权所有,请勿未授权转载!!!
function __construct(){
虎hpasz泰n克oo新mn_kj闻yylx网i版权所有,请勿未授权转载!!!
echo 'b';
虎i泰gqb克k新xq_d闻j网n版权所有,请勿未授权转载!!!
}
虎p泰o克y新w闻b网nliv版权所有,请勿未授权转载!!!
}
虎avr_e泰_克pyhtz新bnmp闻fumg网rtf版权所有,请勿未授权转载!!!
虎ynz泰pleel克aknu新e闻bcxw网vzjf版权所有,请勿未授权转载!!!
$test=new b();
虎bn泰yoa克i新piop闻bwxl网yznt版权所有,请勿未授权转载!!!
运行结果:
虎jzb泰ahby克fev新fmwwo闻z网toc_版权所有,请勿未授权转载!!!
b
虎j泰kgv_n克lo新we闻lnc网o版权所有,请勿未授权转载!!!
虎nvp泰lc克jz新zahmz闻tzdmv网gc_版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎tc泰per克ifxk新dbq闻fsqr网wzxz版权所有,请勿未授权转载!!!
虎isym泰clp克fzig新rovji闻il网izbur版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎ws泰kpf克eb新lvtts闻cs网icdo版权所有,请勿未授权转载!!!
include 'a.php';
虎a泰uqfq克j新_hyh闻ue网wgr版权所有,请勿未授权转载!!!
class b extends a{
虎gf泰akxs克u_fc_新j闻tvk网ognma版权所有,请勿未授权转载!!!
function __construct(){
虎skyzy泰djokc克papf新oj闻n网hj版权所有,请勿未授权转载!!!
parent::__construct();
虎as泰r克ntg新co闻_gj网ese版权所有,请勿未授权转载!!!
echo 'b';
虎dh泰idi克bim新i_qy闻tvpr网bvdh版权所有,请勿未授权转载!!!
}
虎ejvf泰ae克g新_闻vwduo网ypg版权所有,请勿未授权转载!!!
}
虎ih泰cxxc克so_d新h闻tteyj网d版权所有,请勿未授权转载!!!
虎qwcii泰ucw克bubfz新gpufv闻s网sy版权所有,请勿未授权转载!!!
$test=new b();
虎tgs泰gm克hrgiw新nurg_闻lzm网b版权所有,请勿未授权转载!!!
那么输出结果是:
虎maybn泰w克kagm新bzmn闻u网e版权所有,请勿未授权转载!!!
ab
虎xngl泰ubsxk克jve新riyf闻cb网tprj版权所有,请勿未授权转载!!!
虎qrjtl泰lc克jqo新s闻efadd网ed版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎hvux泰xrae克k新tmf闻p_网_w版权所有,请勿未授权转载!!!
虎tgx泰g克uon新ylt闻gs_网vvw版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎l泰c克ux_n_新r闻azjq网_版权所有,请勿未授权转载!!!
虎xw泰ob克dd新ky闻x网woqkl版权所有,请勿未授权转载!!!
BaseAction.class.php
虎pgf泰paoaj克mrc新d_mr闻g网s版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎n泰w克ycjw新gwgck闻m网zookm版权所有,请勿未授权转载!!!
public function _initialize(){
虎i泰r克rh_s新nl闻a网m版权所有,请勿未授权转载!!!
echo 'baseAction';
虎d泰ko克yov新uipvp闻um网_w_r版权所有,请勿未授权转载!!!
}
虎sje泰gz克rh新c闻ybbvx网t版权所有,请勿未授权转载!!!
}
虎bpu泰w克_ye新vygvf闻jn网o_a版权所有,请勿未授权转载!!!
虎efwu泰j克s新sfu_闻rs网yhr版权所有,请勿未授权转载!!!
IndexAction.class.php
虎vakr泰ayux克a新zeg闻zogxo网oiw_x版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎ci泰cp克wg新jys_闻zzag网oqg版权所有,请勿未授权转载!!!
public function (){
虎d泰do克bp_da新fks闻yhz网y版权所有,请勿未授权转载!!!
echo 'indexAction';
虎rd泰ed克yx新jrm_闻qa网xpjxo版权所有,请勿未授权转载!!!
}
虎phrqc泰k_i克a新tt闻oz网pv版权所有,请勿未授权转载!!!
}
虎dadza泰jfjgw克byuqz新yg闻bsu网ymvcp版权所有,请勿未授权转载!!!
虎ux泰jszkq克yc新nemr闻onv网erf版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎tjmw泰ouuk克q新jx闻sut网t版权所有,请勿未授权转载!!!
baseActionindexAcition
虎gmkmj泰rzsxw克_d新bpedm闻ces网go版权所有,请勿未授权转载!!!
虎bxyp泰qal克isvma新_ttg闻ln网j版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎um泰qownr克hgsvi新qz闻xogq网dywx版权所有,请勿未授权转载!!!
虎mxd泰krb克xmtso新yn闻dr网ut版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎du泰pr克z新unvl闻slf网yqm版权所有,请勿未授权转载!!!
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