ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 3147
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎ihmt泰y克yav新fxgsy闻ul网jnxb版权所有,请勿未授权转载!!!
虎px泰ltm克jy新jxia闻n网psa版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎nwhgn泰vfv克_新zcq_n闻qwy网tgvu版权所有,请勿未授权转载!!!
虎u泰cqsba克fxhoc新xbl闻v网pk版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎_vj泰p克u新trl闻s网jaw版权所有,请勿未授权转载!!!
虎e泰uxsp克bzehq新lp闻jklma网nm版权所有,请勿未授权转载!!!
a.php
虎ac泰l_yxm克a新p闻w网wq版权所有,请勿未授权转载!!!
class a{
虎dv泰iw克l新fzv闻opsb网unkaq版权所有,请勿未授权转载!!!
function __construct(){
虎sd泰pckr克qwstx新vmm闻_iohh网qw_ov版权所有,请勿未授权转载!!!
echo 'a';
虎slh泰oiwvc克qwk新pwp闻je网d版权所有,请勿未授权转载!!!
}
虎lmcvz泰l_克_新v闻rnbi网lf版权所有,请勿未授权转载!!!
}
虎ymyu泰_克tbzcb新abn闻md网_版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎pdc泰tgb克il新qidy闻no网fi版权所有,请勿未授权转载!!!
include 'a.php';
虎n泰vxiv克d新zi闻nnx网eq版权所有,请勿未授权转载!!!
class b extends a{
虎xncoq泰ow克zb新zfgzi闻wdpr网gdk版权所有,请勿未授权转载!!!
function __construct(){
虎g泰qghm克h新go闻hqyxz网s版权所有,请勿未授权转载!!!
echo 'b';
虎pgwvw泰wb克zb新asrg闻iqc网wx版权所有,请勿未授权转载!!!
}
虎gbjy泰xr_ii克nhfpi新k闻hrkry网neus版权所有,请勿未授权转载!!!
}
虎_sboj泰sh克tuwn新fsjs闻aj_g网dw版权所有,请勿未授权转载!!!
虎cm泰m克a新xrh闻aob网cgxa版权所有,请勿未授权转载!!!
$test=new b();
虎pvn泰o克_bkgz新td闻vpj网pjqh版权所有,请勿未授权转载!!!
运行结果:
虎zfpbq泰e克i新pjs闻kc网y_tvx版权所有,请勿未授权转载!!!
b
虎w泰v克f新cwkpv闻fl网mdbr版权所有,请勿未授权转载!!!
虎zb泰ibvmi克snz新lxcgb闻lf网k_o版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎d泰ofl克zn新j闻fwdsl网e版权所有,请勿未授权转载!!!
虎iwk泰g克jotk_新c闻_网ei版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎vx泰ho克_rqr_新x闻ebsd网ozn版权所有,请勿未授权转载!!!
include 'a.php';
虎x泰cca_克ot新t闻ds网xpya版权所有,请勿未授权转载!!!
class b extends a{
虎g泰ksonx克saa新gyt闻c网tr_版权所有,请勿未授权转载!!!
function __construct(){
虎rltlj泰rqv克ocyj新brd闻g网ph版权所有,请勿未授权转载!!!
parent::__construct();
虎jb泰bk克ltttz新gbuus闻uxm网q版权所有,请勿未授权转载!!!
echo 'b';
虎vk泰nw克cdrei新m闻pmnx网gvlp版权所有,请勿未授权转载!!!
}
虎oddv泰tlwvk克ywkd新l闻cnua网shvt版权所有,请勿未授权转载!!!
}
虎yrtc泰_kb克lvk新yreu闻gnh网msf版权所有,请勿未授权转载!!!
虎sh泰mbiac克o新p闻lkkjb网nl版权所有,请勿未授权转载!!!
$test=new b();
虎tqkae泰je克sxmzc新xqdn闻icels网edae版权所有,请勿未授权转载!!!
那么输出结果是:
虎yq泰yowhv克ad新u闻ltbjs网ky版权所有,请勿未授权转载!!!
ab
虎tiru泰ip克mjcap新ebsi闻gqet网zcd版权所有,请勿未授权转载!!!
虎c_v泰luoy克i新kwl闻wkp网q版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎v泰bfjbg克jpdy新nic闻swqbe网bjbpm版权所有,请勿未授权转载!!!
虎td泰n克z新p闻ql网lvoo版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎kzg_泰nh_g克nbi新xdw闻zf网cers版权所有,请勿未授权转载!!!
虎xol泰rwxv克q新ypbw闻hs网eqw版权所有,请勿未授权转载!!!
BaseAction.class.php
虎rd泰xvbzc克szz_新yrak闻o网ofeve版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎igl泰ewj克rmoub新usyba闻i网i版权所有,请勿未授权转载!!!
public function _initialize(){
虎vcu泰nfjz克m新ybrzt闻ahf网gq版权所有,请勿未授权转载!!!
echo 'baseAction';
虎wsjf泰awnsv克qas新uz闻t网ei版权所有,请勿未授权转载!!!
}
虎c_dz泰rc克mf_d新myuj闻bmnlp网k_ei_版权所有,请勿未授权转载!!!
}
虎x泰zvxtf克eid新des闻erx网om版权所有,请勿未授权转载!!!
虎p泰jntan克pcyb新_a闻nwlzw网fqr版权所有,请勿未授权转载!!!
IndexAction.class.php
虎jsz泰rdjo克b新__svy闻pwqs网wje版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎gakt泰bxb克odfh新zsb闻inyvr网jtplr版权所有,请勿未授权转载!!!
public function (){
虎er泰smdo克yhaa新s闻_网kbphb版权所有,请勿未授权转载!!!
echo 'indexAction';
虎ld泰vpip克zorev新sk闻low网y版权所有,请勿未授权转载!!!
}
虎qnejy泰jscb克hfxcu新tz闻jw网mehzh版权所有,请勿未授权转载!!!
}
虎qop泰v克g新wgngy闻ngp网fdf版权所有,请勿未授权转载!!!
虎_uci泰vrebk克qqy新eaowb闻ggqx网koao版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎oibuf泰himsh克v_txo新i闻vp网j版权所有,请勿未授权转载!!!
baseActionindexAcition
虎_inu泰gva克thnt新a闻zokr网omyfh版权所有,请勿未授权转载!!!
虎u泰wa_e克_jt新jn闻z_o网noi版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎vzs泰jk克vhb新agk闻p网h版权所有,请勿未授权转载!!!
虎djgo泰rov克ecbig新zdq闻f网xhppp版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎x泰v克jo_vn新kcm闻a网zyncu版权所有,请勿未授权转载!!!
Verklaring: alle artikelen /tekeningen die op deze website worden weergegeven, zijn bedoeld om meer informatie te verzenden en de discussie te vergemakkelijken, wat niet betekent dat de website, de host en de organisator het eens zijn met hun meningen of de authenticiteit van hun inhoud bevestigen. De inhoud van de artikelen is alleen voor referentie. Indien de rechten van de oorspronkelijke auteur worden geschonden, neem dan contact op met de beheerder van de website.
Lijst van opmerkingen
-
Geen gegevens