ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 1987
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎h泰quv克ye新kxrv闻r网p版权所有,请勿未授权转载!!!
虎ldt泰wgzx克khy新e_闻tii网o版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎slpjc泰xw_克flh新qirc闻api网uqm版权所有,请勿未授权转载!!!
虎szu泰jl克kif新mhq闻j网xs版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎_al泰p克xlsj新zuqt闻l网i版权所有,请勿未授权转载!!!
虎w泰gdd克cv新hwqxz闻iafcn网uf版权所有,请勿未授权转载!!!
a.php
虎o泰r克eqfis新buk闻y网cgkk版权所有,请勿未授权转载!!!
class a{
虎tqyj泰k克ldlyb新ii闻zpp网phz版权所有,请勿未授权转载!!!
function __construct(){
虎ni泰jmsao克ndd新g闻_e网vmda版权所有,请勿未授权转载!!!
echo 'a';
虎nslbu泰lvgy_克xjl_d新c闻hqkzo网fcjo版权所有,请勿未授权转载!!!
}
虎xuh泰je克cazo新i闻nmwg网k版权所有,请勿未授权转载!!!
}
虎vengh泰zql克ivz新ufsf闻uda网e版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎blb_t泰aq克obmx新nfdl闻kuckl网jdi版权所有,请勿未授权转载!!!
include 'a.php';
虎br泰ptl克uf新apbf闻pzgr网k版权所有,请勿未授权转载!!!
class b extends a{
虎d泰jbcoq克f_新kto闻bj网qd版权所有,请勿未授权转载!!!
function __construct(){
虎q泰m克xxh新dzf闻glw网goq版权所有,请勿未授权转载!!!
echo 'b';
虎uhy泰f克otfq新dg闻pzc网kd版权所有,请勿未授权转载!!!
}
虎p泰wng克osf新hoo闻fdnt网kiwta版权所有,请勿未授权转载!!!
}
虎lg泰mfr克p新wmi闻i网qn_版权所有,请勿未授权转载!!!
虎icbgc泰y克e_u_s新rtjju闻p网ts版权所有,请勿未授权转载!!!
$test=new b();
虎ifnk泰vjdpa克kjb_新wzkv闻iht网wcrgg版权所有,请勿未授权转载!!!
运行结果:
虎lic泰au克uf新vontc闻h_w网iai版权所有,请勿未授权转载!!!
b
虎f泰dii克ryud新bl闻lu网sag版权所有,请勿未授权转载!!!
虎zb泰_克fixs新vxso闻ai网llws版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎n_c泰igmuc克qnbu新mkdrv闻zaxwg网zogq版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎zxm泰jkyo克b新t闻u网wusav版权所有,请勿未授权转载!!!
include 'a.php';
虎h泰m克ohzg新hdb闻n网xkk版权所有,请勿未授权转载!!!
class b extends a{
虎le泰twdb克ecg新hqz闻_vb网aheu版权所有,请勿未授权转载!!!
function __construct(){
虎gd泰c克bph新nhch闻t网yis版权所有,请勿未授权转载!!!
parent::__construct();
虎s泰ul克oiw新enxn闻jdki网r版权所有,请勿未授权转载!!!
echo 'b';
虎d泰pjju克kugt新dw闻cc网mn版权所有,请勿未授权转载!!!
}
虎z_c泰b克ks新i闻ymm网iwya版权所有,请勿未授权转载!!!
}
虎qc泰tt克fey新lbrqc闻h网rwwe版权所有,请勿未授权转载!!!
虎y泰lhleg克qchyb新njqf闻jxbzi网xiip版权所有,请勿未授权转载!!!
$test=new b();
虎asogb泰wlx克kvffi新eety闻x网lpe版权所有,请勿未授权转载!!!
那么输出结果是:
虎cn泰ecxf克kn新bfik闻f网hr版权所有,请勿未授权转载!!!
ab
虎t泰xbrse克_b新fjrn闻oqp网kk版权所有,请勿未授权转载!!!
虎_hawg泰ubqx克zeucm新b闻yac网vx版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎cjf泰hrb克c新rf_闻jk网wlk版权所有,请勿未授权转载!!!
虎vr泰hqfmv克hvox新t闻vzaw网_uyih版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎dpfo泰uvnm克n新zcy闻tqgr网jen_i版权所有,请勿未授权转载!!!
虎zbif泰jcpzh克eg新jlg_n闻bstg网_zaej版权所有,请勿未授权转载!!!
BaseAction.class.php
虎vx泰nf克p新f闻h网nlc版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎peemm泰wzyrw克qudj新utvg闻gzu网in版权所有,请勿未授权转载!!!
public function _initialize(){
虎bdgsc泰ufj克r新fxpw闻nx网aet版权所有,请勿未授权转载!!!
echo 'baseAction';
虎tux泰b克_ccjp新ual闻_rblu网cdbkr版权所有,请勿未授权转载!!!
}
虎gitzw泰brzmg克k新o_b闻o网pbke版权所有,请勿未授权转载!!!
}
虎afq泰d_eb克g新hw闻ngjo网ku版权所有,请勿未授权转载!!!
虎lop泰a克qhoa新m闻tr网yxia版权所有,请勿未授权转载!!!
IndexAction.class.php
虎a泰_克j新bd闻d网hv版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎bjybe泰mrpv克y新i闻dxdh网xurs版权所有,请勿未授权转载!!!
public function (){
虎xijqm泰mjq克px新o闻je网q版权所有,请勿未授权转载!!!
echo 'indexAction';
虎y泰_u克njjki新zft闻h网rgkj版权所有,请勿未授权转载!!!
}
虎eidhg泰cxxdb克ytcy新__闻dmle网ebdtl版权所有,请勿未授权转载!!!
}
虎odu泰rxm克hhb新qsmhc闻y网wk版权所有,请勿未授权转载!!!
虎skbqx泰ondl克nx新ajq闻shwy网hdzds版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎v_r泰ytzxb克ny新r闻_网qd版权所有,请勿未授权转载!!!
baseActionindexAcition
虎gziyt泰aeb克n新azzn闻vqm网bvyjr版权所有,请勿未授权转载!!!
虎b泰ytl克zjktu新al闻lng网qp版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎jtjcf泰nz克kxck新ribb闻b网eq版权所有,请勿未授权转载!!!
虎ohp_u泰v克orr新zjx闻krsvd网bji版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎a泰mads克py新oogpy闻pganf网fwf版权所有,请勿未授权转载!!!
声明:本ウェブサイトで転載された文章/図などの原稿は、より多くの情報を伝達し、検討する目的で、当駅と主催、運営者がその観点に賛同したり、内容の真実性を確認したりすることを意味していません。文章の内容はあくまで参考にしてください。もし原作者の権利を侵害したら、ウェブサイトの管理者に連絡してください。
コメントリスト
-
データがありません