ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 5743
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎akx泰l克fsct新ly闻c网uxum版权所有,请勿未授权转载!!!
虎jj泰qx克wwdo新q__z闻b网vfhm版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎o_q泰uf克ul新rgg闻vu_ht网edve版权所有,请勿未授权转载!!!
虎a泰ozd克bnth新yockx闻m_网ubz版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎kxd泰wa克vsh新zgtvx闻wypx网kxnrr版权所有,请勿未授权转载!!!
虎gl泰mr克heh新usn_闻u网pzqr版权所有,请勿未授权转载!!!
a.php
虎mx泰isoa克bkd新qk闻aqep网jiyls版权所有,请勿未授权转载!!!
class a{
虎o泰pb_h克dg新jtp闻rdyku网mvvh版权所有,请勿未授权转载!!!
function __construct(){
虎de__泰iww克vl新x闻avuk_网ks版权所有,请勿未授权转载!!!
echo 'a';
虎uehle泰bs克xr新hswet闻i网xj版权所有,请勿未授权转载!!!
}
虎omnsb泰hig克kad新bw闻dcq网b版权所有,请勿未授权转载!!!
}
虎p泰gk克ydkkk新eto_闻n网ge版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎w泰o克gem新ttpgv闻j网dkarj版权所有,请勿未授权转载!!!
include 'a.php';
虎f泰x克xaew新hzsm闻mzay网qoag版权所有,请勿未授权转载!!!
class b extends a{
虎_p泰moi克vvbft新kwmvq闻nsavn网nnceb版权所有,请勿未授权转载!!!
function __construct(){
虎i泰wn克ip新z闻vkul网_版权所有,请勿未授权转载!!!
echo 'b';
虎razf泰iq克dtck新rd闻xw网x版权所有,请勿未授权转载!!!
}
虎n泰v克xdxio新si闻gpmdi网fjvkz版权所有,请勿未授权转载!!!
}
虎bhc泰wv克_新sn闻sxeq网wdwif版权所有,请勿未授权转载!!!
虎nkh_f泰ur克fv新qjguw闻mxjs网bhrkf版权所有,请勿未授权转载!!!
$test=new b();
虎qcu泰o克g新u闻lvn网meqk版权所有,请勿未授权转载!!!
运行结果:
虎mb泰tnbpw克xet新_wro闻rfooq网ypow版权所有,请勿未授权转载!!!
b
虎av_hm泰wml克bk新dt闻s网dqv版权所有,请勿未授权转载!!!
虎fan泰hdo克zlx新iqfp闻d网er版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎lb泰v克mdapg新dqc闻sslh网uzode版权所有,请勿未授权转载!!!
虎a泰g_y克jqzr新m_闻j网hhlvs版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎fkobl泰nwppj克gug新b闻pyo_e网ibj版权所有,请勿未授权转载!!!
include 'a.php';
虎s泰spc克x_新bx_an闻memi网pvebt版权所有,请勿未授权转载!!!
class b extends a{
虎xiais泰wbu克djwj新a闻efjr网i版权所有,请勿未授权转载!!!
function __construct(){
虎go泰z克zg新f闻c_h网_ud版权所有,请勿未授权转载!!!
parent::__construct();
虎zu泰sa克r新zx闻jz网fvh版权所有,请勿未授权转载!!!
echo 'b';
虎w泰zd克vjs新xf闻uitz网v版权所有,请勿未授权转载!!!
}
虎ezgto泰yeq克qs新d闻ql网qfqa版权所有,请勿未授权转载!!!
}
虎o泰y克kzrx新c闻qbotf网y版权所有,请勿未授权转载!!!
虎mpw泰e克qevx新ul闻qsh_网rbf版权所有,请勿未授权转载!!!
$test=new b();
虎ieiy泰ed克neu新yphz闻hk网xse版权所有,请勿未授权转载!!!
那么输出结果是:
虎b泰wfu克hklgj新nxb闻v网prwy版权所有,请勿未授权转载!!!
ab
虎bp泰ty克zozxz新bksmu闻jsnr网xxwie版权所有,请勿未授权转载!!!
虎ktz泰g克jmmv新c闻hnmw网z版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎zdve泰d克cslk新tj闻n网fmd版权所有,请勿未授权转载!!!
虎xs泰gmtr克gxr新wqtv闻xncdo网o版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎vpa泰uin克r新h闻iepxn网a版权所有,请勿未授权转载!!!
虎aevzq泰v_fin克skg新_bg闻xos网an版权所有,请勿未授权转载!!!
BaseAction.class.php
虎bgtt泰h_zp克z新ylj闻xwx网vhnf版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎dptg泰v_wr克_o新lokc闻qj网yjte版权所有,请勿未授权转载!!!
public function _initialize(){
虎gotb泰c克t新rffu闻nk_v网uf版权所有,请勿未授权转载!!!
echo 'baseAction';
虎oca泰jlq克fo新vja闻mnr网g版权所有,请勿未授权转载!!!
}
虎zxne泰m克i新_egu闻vj网kfhd版权所有,请勿未授权转载!!!
}
虎bakcw泰ez克in_c新xl闻e网cwhaj版权所有,请勿未授权转载!!!
虎qpoj泰wwidr克_s新jt闻fhy网ns版权所有,请勿未授权转载!!!
IndexAction.class.php
虎wu泰oyei克zd新ku闻ll网hzh版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎bzg泰pu_克eax_u新oej闻um网q版权所有,请勿未授权转载!!!
public function (){
虎iunt泰vwc克b新np闻whir网cwifd版权所有,请勿未授权转载!!!
echo 'indexAction';
虎i泰dysun克j_k新jstcv闻wg网szogn版权所有,请勿未授权转载!!!
}
虎gdivp泰jmsc克meh_新tq闻ned网fqt版权所有,请勿未授权转载!!!
}
虎ermku泰iy克ijgwu新zmprv闻z网bqgn版权所有,请勿未授权转载!!!
虎l泰gae克ohfy_新q闻sbyir网xgv版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎e泰ah克ey_bi新ejq闻xith网a版权所有,请勿未授权转载!!!
baseActionindexAcition
虎mkhry泰xvt克i新u闻ii网pkjvd版权所有,请勿未授权转载!!!
虎nfhh泰p克gp新mvj闻xoq网lcm版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎byjo泰onrnv克jt新smu_闻wua网ks版权所有,请勿未授权转载!!!
虎qgtrc泰rqou克ws新ji闻uwsw网lhp版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎ub泰j克b_新xcytm闻m网bgu版权所有,请勿未授权转载!!!
声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。
评论列表
-
暂无数据