ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 4377
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎er泰fszb克wmb新cwqk闻ualnv网j版权所有,请勿未授权转载!!!
虎bcy泰dl克lv新ish闻ytiws网hnubh版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎qhx泰c克xs新tsp闻s网eetpt版权所有,请勿未授权转载!!!
虎agzii泰u克psb_新de闻v_fxn网wxaf版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎_z泰_d_克vgnrq新ogd闻h_qym网lbbm版权所有,请勿未授权转载!!!
虎boc泰l克ayrdq新obdn闻o网l版权所有,请勿未授权转载!!!
a.php
虎kgrac泰_h克vst_f新ixrbu闻nbya网t版权所有,请勿未授权转载!!!
class a{
虎eoyho泰wdkvf克rbs新l闻sqpg网gkm版权所有,请勿未授权转载!!!
function __construct(){
虎qzl泰azp克w新vz闻uyvde网gj版权所有,请勿未授权转载!!!
echo 'a';
虎gqhk泰d克ntx新gc闻z网iyvtp版权所有,请勿未授权转载!!!
}
虎ug泰svq克yyp新j闻ijys网ojib_版权所有,请勿未授权转载!!!
}
虎soe泰yjs克mtq新jkya闻ass网gsae版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎lvjjw泰w克irmbo新wldw闻jxru网z版权所有,请勿未授权转载!!!
include 'a.php';
虎goyn泰zsr克xst新whju闻mbo网mo版权所有,请勿未授权转载!!!
class b extends a{
虎pt泰ekboy克b_vyn新n闻ne网gw版权所有,请勿未授权转载!!!
function __construct(){
虎bh泰kzoiy克ulcr新bic闻fgq网z_版权所有,请勿未授权转载!!!
echo 'b';
虎otkbg泰qlcrs克v新nuje闻_z网bas版权所有,请勿未授权转载!!!
}
虎suk泰apwk克q新_g闻xv网yfyi版权所有,请勿未授权转载!!!
}
虎rr泰kbn克_lcm新pezl闻ujz网krl版权所有,请勿未授权转载!!!
虎uafpv泰p克x新vuk闻rd网hyx版权所有,请勿未授权转载!!!
$test=new b();
虎kbrw泰qlvwm克wscdu新_w闻bs网ilvqh版权所有,请勿未授权转载!!!
运行结果:
虎uaujx泰dnv克gf新a闻_kxmc网knij版权所有,请勿未授权转载!!!
b
虎iwagv泰ksss克_vzwz新xknc闻bduxq网orrri版权所有,请勿未授权转载!!!
虎k泰qw克wbjs新i_闻otnml网ek版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎m泰nmqlc克g新nv闻k网q版权所有,请勿未授权转载!!!
虎ugyy泰sk克kef新rxe闻aers网zudx版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎ytt_泰uc克hnk新ifu闻pea网vht版权所有,请勿未授权转载!!!
include 'a.php';
虎c泰ps_g克kynf新ox闻fdgy网e版权所有,请勿未授权转载!!!
class b extends a{
虎kbn_泰j克fg新fxhv闻hi网l版权所有,请勿未授权转载!!!
function __construct(){
虎nojff泰awy克wepo新dst闻jgk网dctld版权所有,请勿未授权转载!!!
parent::__construct();
虎zzvj泰yf克ghl新kfki闻awm网_xzyw版权所有,请勿未授权转载!!!
echo 'b';
虎bcpc泰zklz克e新v闻smrdw网zd版权所有,请勿未授权转载!!!
}
虎z泰hnji克tayk_新rhgd闻g网h版权所有,请勿未授权转载!!!
}
虎bcv泰l_tdd克jyltx新bqoye闻_pq网r版权所有,请勿未授权转载!!!
虎kptv泰ktah克rg新lb闻i网ecsam版权所有,请勿未授权转载!!!
$test=new b();
虎chn泰no克r新komic闻mz网xr版权所有,请勿未授权转载!!!
那么输出结果是:
虎s泰f克pl_j新v闻wlc网pmhli版权所有,请勿未授权转载!!!
ab
虎q泰_克a新pqx闻rt网feuu版权所有,请勿未授权转载!!!
虎hswg泰mye克mk新wozwt闻nz网g版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎wtm泰qs克l新w闻eoa网t版权所有,请勿未授权转载!!!
虎g泰fe克bl新vw闻cjmxh网gmcpv版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎aparq泰s克c新abul闻r网cxpg版权所有,请勿未授权转载!!!
虎lxzvt泰qj克nzqw新_gv闻nx网fpjxc版权所有,请勿未授权转载!!!
BaseAction.class.php
虎e泰x克oa新fxpm闻b网wj_ik版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎sxkf泰lkxoo克oqnue新gp_闻bam网jh版权所有,请勿未授权转载!!!
public function _initialize(){
虎mav泰hox克g新mmb闻jxnx_网wkl版权所有,请勿未授权转载!!!
echo 'baseAction';
虎enj泰rt克h新cqnfs闻ll网fu版权所有,请勿未授权转载!!!
}
虎vh泰nngw克olxt新op闻qca网kn版权所有,请勿未授权转载!!!
}
虎mkx泰u_克j新adif闻o网nu版权所有,请勿未授权转载!!!
虎ttaz泰r克pvlw新hd闻y网nocm版权所有,请勿未授权转载!!!
IndexAction.class.php
虎jidv泰eb克g新si闻_v网jun版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎hl泰gxtht克b新jly闻p网etv版权所有,请勿未授权转载!!!
public function (){
虎dwi泰di克w新y闻s网plvkz版权所有,请勿未授权转载!!!
echo 'indexAction';
虎vh泰g克tvgb新fhgty闻rb网r版权所有,请勿未授权转载!!!
}
虎rc泰_uaez克syw新jco闻yweh网_srit版权所有,请勿未授权转载!!!
}
虎_drh泰cfz克qt新z闻nlkp网ynh版权所有,请勿未授权转载!!!
虎m泰extu克a新h闻ymqhp网h版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎hdqnl泰lv克ve新ogcue闻dr网galnb版权所有,请勿未授权转载!!!
baseActionindexAcition
虎iyer泰wgdq克woqw新pew闻amg网koe版权所有,请勿未授权转载!!!
虎mvlyj泰qzmu_克x_c新ouv闻_eqd网rvxug版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎kpt泰ukgk克j新rlad闻ln网ck版权所有,请勿未授权转载!!!
虎e_pl泰a克hi新q闻ovu网ljdjf版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎zp泰moanr克qqs新qk闻j网bsj版权所有,请勿未授权转载!!!
声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。
评论列表
-
暂无数据