ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 5494
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎htzf泰e克wuaix新zxin闻qcu网e版权所有,请勿未授权转载!!!
虎ifvsb泰tdhkx克umhk新qz_d闻mna网lzyg版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎ha泰xj克husn新ad闻hkq网ocqdb版权所有,请勿未授权转载!!!
虎cboke泰nna克jlglu新zfzjz闻k网tfdgc版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎rd泰uvjg克rqr新j闻bnn网lq版权所有,请勿未授权转载!!!
虎ztm泰o克irg_新s闻nx网rne版权所有,请勿未授权转载!!!
a.php
虎b泰p_克rv新qnhta闻semv网wo版权所有,请勿未授权转载!!!
class a{
虎fyh泰mf克zfw新abqka闻uofw网diwk版权所有,请勿未授权转载!!!
function __construct(){
虎t泰ymh克che新vc闻z网oqbi版权所有,请勿未授权转载!!!
echo 'a';
虎ai泰epbpm克ficch新j闻mfcos网s_mod版权所有,请勿未授权转载!!!
}
虎pvgaf泰qc克e_新de闻y网ty__x版权所有,请勿未授权转载!!!
}
虎_n泰ua克gkv新wrz闻uc网q版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎ri泰uw克wxq_q新x闻h网lsiez版权所有,请勿未授权转载!!!
include 'a.php';
虎vv泰vknx克bbnl新c闻n网dv_版权所有,请勿未授权转载!!!
class b extends a{
虎pbssy泰lyf克j新i闻k网zwjc版权所有,请勿未授权转载!!!
function __construct(){
虎jhb泰xgib克g新jekh闻_wkn网pi版权所有,请勿未授权转载!!!
echo 'b';
虎ie泰le克ivcsg新zjkm闻ibhh网zacg版权所有,请勿未授权转载!!!
}
虎bxt泰spy_克goz新sqwq_闻x网na版权所有,请勿未授权转载!!!
}
虎eivlp泰uapg克i新cd闻aow网hiy版权所有,请勿未授权转载!!!
虎gyxin泰x克xmpd新idhki闻dkpk网vle版权所有,请勿未授权转载!!!
$test=new b();
虎bwz泰sv克vlcl新oat闻hrihn网zmr版权所有,请勿未授权转载!!!
运行结果:
虎lghmp泰uc克uajg新enc闻bhh网th_f版权所有,请勿未授权转载!!!
b
虎gjc_c泰fehd克gnvin新s闻_网ffslz版权所有,请勿未授权转载!!!
虎qntvb泰u克vjy新qt闻sme网_mk版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎htkj泰l克wrvrm新r闻gan网flsb版权所有,请勿未授权转载!!!
虎afnm泰f克st_g新vz闻h网ts版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎eqzwp泰ciifi克aoo新thqei闻_eh_网ob版权所有,请勿未授权转载!!!
include 'a.php';
虎j泰oznc克ptbb新oajjs闻fout网ypfbv版权所有,请勿未授权转载!!!
class b extends a{
虎zicz泰vzj克wavg新_闻tgo_m网ds版权所有,请勿未授权转载!!!
function __construct(){
虎z泰jiomn克rkr新n闻mtau网pkon版权所有,请勿未授权转载!!!
parent::__construct();
虎neqk泰kdd克odv新ltcz闻dk网xp版权所有,请勿未授权转载!!!
echo 'b';
虎y泰eungx克fu_b新x闻gbdcs网dmpc版权所有,请勿未授权转载!!!
}
虎pj泰dtc克mmro新moj闻jwmg网stisj版权所有,请勿未授权转载!!!
}
虎d泰qgoun克eikx新ol闻trpq网n版权所有,请勿未授权转载!!!
虎b_io泰t克mrkj新bnls闻g网pew版权所有,请勿未授权转载!!!
$test=new b();
虎vlkb泰l克cuf新b闻af网q版权所有,请勿未授权转载!!!
那么输出结果是:
虎i泰r克iqc新_e闻tp网v_b版权所有,请勿未授权转载!!!
ab
虎wp泰hxb克cc新vdxa闻ctyvd网wu版权所有,请勿未授权转载!!!
虎obw泰abbu克db新xuvij闻qf网zts版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎sy_x泰qno克vazh新q闻u网bu版权所有,请勿未授权转载!!!
虎_qsh泰hhf克o新an闻srd网p版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎fmldz泰ldjj克r新hbqci闻leg网asw版权所有,请勿未授权转载!!!
虎jh泰xhw克zh新b闻eoxx网rw版权所有,请勿未授权转载!!!
BaseAction.class.php
虎q泰z_fl克d新mqmg闻i网yj版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎j泰my克ijsb新web闻mqypa网z_hr版权所有,请勿未授权转载!!!
public function _initialize(){
虎xaynv泰rm克oedrb新rma闻n网aubvg版权所有,请勿未授权转载!!!
echo 'baseAction';
虎lpfvs泰sv_cq克zzcu新ra闻oqzf网p版权所有,请勿未授权转载!!!
}
虎wtouz泰tzi克kng新l闻wvro网v版权所有,请勿未授权转载!!!
}
虎rpi_泰_wyzy克is新zmor闻bnnc网vlau版权所有,请勿未授权转载!!!
虎q泰nf克hci新pr闻wzz_网ukei版权所有,请勿未授权转载!!!
IndexAction.class.php
虎an泰wxw克s新axv闻e_qz网bs版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎junye泰w克vt新klte闻pq网a版权所有,请勿未授权转载!!!
public function (){
虎he泰nta克lrc新a闻wev网ijj版权所有,请勿未授权转载!!!
echo 'indexAction';
虎r泰ilmm克d新gaz_p闻fj网rvg版权所有,请勿未授权转载!!!
}
虎oy泰_cg克jpy新zy闻wi网cbmdq版权所有,请勿未授权转载!!!
}
虎k泰tbsh克pjfc新yr闻gw网shsyg版权所有,请勿未授权转载!!!
虎j泰ilqk克sto新_h闻i网aka版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎ddbbq泰if克fv新hfim闻y网y版权所有,请勿未授权转载!!!
baseActionindexAcition
虎lge泰zwme克lkp新fd闻jm网heuy版权所有,请勿未授权转载!!!
虎fxsum泰ohshr克e新rumj闻k_q网z_z版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎wed泰ve克yb新ooug闻j网vd版权所有,请勿未授权转载!!!
虎d泰k克sl新jl闻piy网m版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎_ud泰_克owk新qm闻xiuq网esyo版权所有,请勿未授权转载!!!
Lausunto: kaikki tällä sivustolla olevat artikkelit / piirrokset on tarkoitus välittää enemmän tietoa ja helpottaa keskustelua, mikä ei tarkoita sitä, että sivusto, isäntä ja järjestäjä ovat samaa mieltä heidän mielipiteistään tai vahvistaa niiden sisällön aitoutta. Artikkelien sisältö on tarkoitettu ainoastaan viitteeksi. Jos alkuperäisen tekijän oikeuksia rikotaan, ota yhteyttä verkkosivuston ylläpitäjään.
Kommenttien luettelo
-
Ei tietoja