ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 4014
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎iutq泰tv克ss新pvaw闻dtthk网k版权所有,请勿未授权转载!!!
虎_jgu泰jnqmf克yn新vrrgi闻pyhzk网mhw版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎xy_sf泰tj克yftl新ks闻df网a版权所有,请勿未授权转载!!!
虎xynkc泰j克p新fkegr闻ux网qfm版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎f泰z克vnjz新y闻kshkb网ynh版权所有,请勿未授权转载!!!
虎klav泰uq克dcqr新hl闻y网nm版权所有,请勿未授权转载!!!
a.php
虎snn泰vda克hawv新cje闻e网c版权所有,请勿未授权转载!!!
class a{
虎lds泰lreg克wr新e闻zbo网zs版权所有,请勿未授权转载!!!
function __construct(){
虎g泰m克aqvje新ktmkt闻nt网g版权所有,请勿未授权转载!!!
echo 'a';
虎k泰kp克mtkvb新wxe闻ib网m版权所有,请勿未授权转载!!!
}
虎_gr泰ew克prm新vwdjy闻hj网_m版权所有,请勿未授权转载!!!
}
虎cg泰vwvwg克okr新k闻lflbz网pxtm版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎ei泰mycf克mdzjh新zidr闻qx网crp版权所有,请勿未授权转载!!!
include 'a.php';
虎par泰vgylg克s新_ak闻mme网ehpkm版权所有,请勿未授权转载!!!
class b extends a{
虎jnkq泰sktyr克fvge新ujpxr闻vjur_网meun版权所有,请勿未授权转载!!!
function __construct(){
虎erk泰ivsf克cxgzp新ygwo闻ssj网h_luz版权所有,请勿未授权转载!!!
echo 'b';
虎c泰r克f新f闻i网hprb版权所有,请勿未授权转载!!!
}
虎wq泰n__li克guvlp新q闻p__xu网ho版权所有,请勿未授权转载!!!
}
虎_ioxz泰kn克ei新jwaj闻csg_网wxoro版权所有,请勿未授权转载!!!
虎izfj泰wgr克verf新yhj闻b网tl版权所有,请勿未授权转载!!!
$test=new b();
虎mrkcl泰lq克wa新s闻p网koyyl版权所有,请勿未授权转载!!!
运行结果:
虎ahz泰coala克qo新cvuip闻vcy网bk版权所有,请勿未授权转载!!!
b
虎js泰xbxvw克jnb新bnhm闻aq网xwv版权所有,请勿未授权转载!!!
虎u泰u克y新lah闻lhr网nfso版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎ypouu泰ix克pds新mt闻h网wblj版权所有,请勿未授权转载!!!
虎ko泰llxq克kaz新hibx闻zk网tb版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎tkpb泰mxxi克tjht新t闻uvbm网sc版权所有,请勿未授权转载!!!
include 'a.php';
虎wtgmz泰dmdsu克bxobf新xw闻qcf网ddq版权所有,请勿未授权转载!!!
class b extends a{
虎e泰cng克nado新pawh闻ixrp网k版权所有,请勿未授权转载!!!
function __construct(){
虎vjsc泰dezu克hix新h闻ecas网_i版权所有,请勿未授权转载!!!
parent::__construct();
虎cv泰q_foi克v新upzra闻ryfne网vihru版权所有,请勿未授权转载!!!
echo 'b';
虎mcte泰l克vld新dx闻xrv网lg版权所有,请勿未授权转载!!!
}
虎vs_泰tbva克i新duv闻isu网xl版权所有,请勿未授权转载!!!
}
虎o泰lp克gegej新zo闻exx网yy版权所有,请勿未授权转载!!!
虎gmo泰at克hw新u闻fpeug网o版权所有,请勿未授权转载!!!
$test=new b();
虎eqcn泰f克z_新aff闻cxdlt网jml版权所有,请勿未授权转载!!!
那么输出结果是:
虎t泰yag克y新ryz闻k网fhejc版权所有,请勿未授权转载!!!
ab
虎aumjr泰feuh克m新_闻j网lin版权所有,请勿未授权转载!!!
虎o泰wvg克kkc新_seta闻g网xupi版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎jlqz泰fecmk克yscxm新jhyx闻ggp网_pfhs版权所有,请勿未授权转载!!!
虎msfqs泰vmvts克dygn新bt闻hbb网w版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎iu泰dzuah克mx_y新fng闻tpz_t网ubc版权所有,请勿未授权转载!!!
虎deof泰hio克oac新ey闻kn网pueh版权所有,请勿未授权转载!!!
BaseAction.class.php
虎xfmbo泰nhako克zlgho新loiq闻isga网_zhg版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎jrogz泰knwjs克vsy新rxt闻cwh网ide版权所有,请勿未授权转载!!!
public function _initialize(){
虎wq泰lf_克v新_chg闻etmp网n版权所有,请勿未授权转载!!!
echo 'baseAction';
虎f_泰ogn克clxe新fie闻tbxog网nzhq版权所有,请勿未授权转载!!!
}
虎e泰o克y新_tj闻c_eqc网tzdi版权所有,请勿未授权转载!!!
}
虎za泰l克t_cz新m_闻alymm网fu版权所有,请勿未授权转载!!!
虎wbs泰jyg克byc新fxrrb闻qm网x版权所有,请勿未授权转载!!!
IndexAction.class.php
虎ybsyr泰lzxad克mr新h闻miuyr网o版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎zs泰bf克da新erbus闻bcc_网fvt版权所有,请勿未授权转载!!!
public function (){
虎ufzvs泰at克wtuk新egxgg闻d网ii版权所有,请勿未授权转载!!!
echo 'indexAction';
虎tzvvh泰lfpd克ub新vhdrx闻albzm网lb版权所有,请勿未授权转载!!!
}
虎m泰v_克sx新jikwm闻xioa网hta版权所有,请勿未授权转载!!!
}
虎vm泰ff克iqo新urp闻f网ee版权所有,请勿未授权转载!!!
虎jky泰sqzza克w新x闻kblt网rynuv版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎ize泰visxy克ledb新p_j闻jqa_网cds版权所有,请勿未授权转载!!!
baseActionindexAcition
虎cqe泰dv克zsmpi新z闻v网p版权所有,请勿未授权转载!!!
虎ae泰tz克_新l_csz闻by网ni版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎m泰z克bf新yn闻aw网rhzpc版权所有,请勿未授权转载!!!
虎jnxeu泰u克srb新py闻_网e版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎obm泰tqaz克dkv_x新yua闻_网yu版权所有,请勿未授权转载!!!
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