ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 4007
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎pnkv泰gcvew克n新pxo闻jqfck网oz版权所有,请勿未授权转载!!!
虎pliv泰ti克kvig新qhv闻vg网hn版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎e泰osazs克ct新qbdbr闻cjg网c_ebw版权所有,请勿未授权转载!!!
虎zezy泰tuk克xwr新pga闻zny网vfab版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎z_泰oun克hf新hwq闻mxspn网yxb版权所有,请勿未授权转载!!!
虎e泰pm_n克kzgtk新micbn闻_q网ozcgu版权所有,请勿未授权转载!!!
a.php
虎a泰gi克cch新llbwc闻dl网bw_xa版权所有,请勿未授权转载!!!
class a{
虎guis泰ab克xvs新fsmqi闻vg网lh版权所有,请勿未授权转载!!!
function __construct(){
虎k泰z克t新zm闻cldsk网ptz版权所有,请勿未授权转载!!!
echo 'a';
虎bbdb泰_jc克ptkus新g_ig闻sd网j版权所有,请勿未授权转载!!!
}
虎qj泰_l克o新bz闻yfw网nnmh版权所有,请勿未授权转载!!!
}
虎hu泰u克l新zn闻rg网rvu版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎xvgur泰zgep克g新bvzh闻nme网vpatc版权所有,请勿未授权转载!!!
include 'a.php';
虎rj泰hul克nhnly新kmad闻so网fjh版权所有,请勿未授权转载!!!
class b extends a{
虎llum泰rfo克yfv新wkmc闻wfa网t版权所有,请勿未授权转载!!!
function __construct(){
虎cnedr泰_gjd克hb新kfzs闻uahb网p版权所有,请勿未授权转载!!!
echo 'b';
虎r泰qimx克tnty新wzia闻vgzon网ienne版权所有,请勿未授权转载!!!
}
虎uokru泰d克kpd新wyi闻nq网k_版权所有,请勿未授权转载!!!
}
虎yun泰iet克kjfx新w闻u网tctoj版权所有,请勿未授权转载!!!
虎ijaa泰f克devlh新mvvn闻tqzra网rgkrq版权所有,请勿未授权转载!!!
$test=new b();
虎nvf_泰wi克xdp新n_bdm闻s网bpfbx版权所有,请勿未授权转载!!!
运行结果:
虎nmcmo泰fmq克aweet新hrwp闻hrd网f版权所有,请勿未授权转载!!!
b
虎swhw泰_克enwzi新gcok闻jwulz网k版权所有,请勿未授权转载!!!
虎rpr泰mcmv克t_新vzxgs闻qej网rlh版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎wb泰ucd克johy新vhi_闻br网vzmlp版权所有,请勿未授权转载!!!
虎ipai泰fdo克nep新_闻avcea网udpq版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎vzii泰toeqv克uye新gi闻py网imna版权所有,请勿未授权转载!!!
include 'a.php';
虎p_or泰qei克_rpo新ebmxj闻m网eugy版权所有,请勿未授权转载!!!
class b extends a{
虎jhplp泰ing克gzlz新q闻pl网wyee版权所有,请勿未授权转载!!!
function __construct(){
虎vwlm泰_ly_h克i新th闻asnx网d版权所有,请勿未授权转载!!!
parent::__construct();
虎xwe泰vgk克vecxi新gl闻whg网icgm版权所有,请勿未授权转载!!!
echo 'b';
虎pzbl泰gsqh克nf新jiqm闻jmdn网yur版权所有,请勿未授权转载!!!
}
虎fwzsg泰ca克zbw新ufh闻mw_网mbbqw版权所有,请勿未授权转载!!!
}
虎cy泰apv克vj新li闻fm_h网e版权所有,请勿未授权转载!!!
虎un泰gehh克tv_j新j闻ryl网e_版权所有,请勿未授权转载!!!
$test=new b();
虎a泰dolin克ach新jk闻toy网jw版权所有,请勿未授权转载!!!
那么输出结果是:
虎pwft泰mds克twxcz新ybcw闻qsx网pqg版权所有,请勿未授权转载!!!
ab
虎orp泰bupb克yzclz新_zi闻ei网bfq版权所有,请勿未授权转载!!!
虎lyi_泰j克ig新lp闻bj网vgom版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎s泰him克q新uht闻ik网b_czs版权所有,请勿未授权转载!!!
虎pdj泰g克jp新uk闻micdx网i版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎lelyv泰erekh克ond新u闻b网ni_oh版权所有,请勿未授权转载!!!
虎w泰gz克tk新jve闻md网x版权所有,请勿未授权转载!!!
BaseAction.class.php
虎lapk泰uho克dh新rorla闻c网f版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎raxo泰td克gcvk新l闻rupk网wvdpr版权所有,请勿未授权转载!!!
public function _initialize(){
虎l泰rsb克vmox新vx闻ea网rbvvw版权所有,请勿未授权转载!!!
echo 'baseAction';
虎gamhd泰_bn克b新hh闻adbu网vc版权所有,请勿未授权转载!!!
}
虎i泰r克o新aehf闻guuk网kyth版权所有,请勿未授权转载!!!
}
虎kdaf泰lf克csp新diz闻v_v_x网fnf版权所有,请勿未授权转载!!!
虎n泰lay克l新rmsht闻rorsw网ynq版权所有,请勿未授权转载!!!
IndexAction.class.php
虎he泰w克c新g闻dekn网ri版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎tjj泰t克an新ng闻v网ai版权所有,请勿未授权转载!!!
public function (){
虎iq泰owjr克dlojk新b闻dcndz网zl版权所有,请勿未授权转载!!!
echo 'indexAction';
虎g泰gg克ri新_oebe闻n网pfes版权所有,请勿未授权转载!!!
}
虎aqm_泰kigz克bqa新prod闻twgjm网fjpbg版权所有,请勿未授权转载!!!
}
虎zkn泰zs_克dp新dy闻iez网khg版权所有,请勿未授权转载!!!
虎gox泰rd克dc新j_q闻wh网vt版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎rem泰xhys克pw新r闻tyr网tv版权所有,请勿未授权转载!!!
baseActionindexAcition
虎sdof_泰xi克msnj新bo闻glc网v版权所有,请勿未授权转载!!!
虎tv泰uj_y克olh新yjra闻xo网jaeyp版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎he泰x克gn新vyvg闻sux网z版权所有,请勿未授权转载!!!
虎lh泰fff克zuk新z闻xsxih网ytnfb版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎ab_i泰lf克w新t闻u_网c版权所有,请勿未授权转载!!!
声明:本ウェブサイトで転載された文章/図などの原稿は、より多くの情報を伝達し、検討する目的で、当駅と主催、運営者がその観点に賛同したり、内容の真実性を確認したりすることを意味していません。文章の内容はあくまで参考にしてください。もし原作者の権利を侵害したら、ウェブサイトの管理者に連絡してください。
コメントリスト
-
データがありません