ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 3149
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎r泰nr克iwfm新g闻lfhja网wbq版权所有,请勿未授权转载!!!
虎bgw泰kfcb克kkj新wf_闻sa网pgvos版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎vhi泰jovq克gco新ykrv闻xkulu网f_mnm版权所有,请勿未授权转载!!!
虎a泰ve克xvit_新ncqyq闻pystf网gsyn版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎iv泰ct_h克k新jknu闻e网o版权所有,请勿未授权转载!!!
虎c泰_克swbq新qxnqx闻y网pbhcd版权所有,请勿未授权转载!!!
a.php
虎sv泰z克auu新s闻vvqz网q版权所有,请勿未授权转载!!!
class a{
虎ktgfj泰gzy克oc新maa闻tb网aybnp版权所有,请勿未授权转载!!!
function __construct(){
虎ebzl泰lylo_克yvhn新kvxgt闻oteu网nypte版权所有,请勿未授权转载!!!
echo 'a';
虎wfdz泰cyy克zc新n闻w网_版权所有,请勿未授权转载!!!
}
虎pc泰ilr克enrgb新ml闻h网uhu版权所有,请勿未授权转载!!!
}
虎oh泰g克d_新z闻gnwbe网xbfdk版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎ts泰rxokr克k_ab新ld闻qepdi网sflnu版权所有,请勿未授权转载!!!
include 'a.php';
虎tqzyb泰xohl克uvs新fg闻r网olhq版权所有,请勿未授权转载!!!
class b extends a{
虎hp泰dp克pt新gqgxo闻fd网ck版权所有,请勿未授权转载!!!
function __construct(){
虎rcphe泰ufy克llz新w闻rxjeq网lx版权所有,请勿未授权转载!!!
echo 'b';
虎z泰mhbfd克uu新ejstz闻xt_b网yp版权所有,请勿未授权转载!!!
}
虎kh泰chrgw克iuw新_rxb闻i网owcb版权所有,请勿未授权转载!!!
}
虎ppk泰n克r新orcej闻mtmoi网eatl版权所有,请勿未授权转载!!!
虎i泰brsqj克dguw新ck闻mvpmk网bv版权所有,请勿未授权转载!!!
$test=new b();
虎j泰wfox克bew新z闻m网l版权所有,请勿未授权转载!!!
运行结果:
虎vsng泰l_克v新xh闻g_y网a版权所有,请勿未授权转载!!!
b
虎qaiqd泰lwnwb克k新geb闻nlzp网i版权所有,请勿未授权转载!!!
虎hc泰t克aig新_n闻ntdo网np版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎zzlj泰avb克_np新s闻z网q_mzo版权所有,请勿未授权转载!!!
虎nu泰ja克eloz新gfv闻w网npgqx版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎whlk泰gaag克vkh新aip闻a网bnqxa版权所有,请勿未授权转载!!!
include 'a.php';
虎thplz泰r克p新n闻mygqt网bjf版权所有,请勿未授权转载!!!
class b extends a{
虎_n泰pmdc克izek新grqpv闻h网wmlo版权所有,请勿未授权转载!!!
function __construct(){
虎yoh泰bkdlm克nsf新ss闻ny网uxmbm版权所有,请勿未授权转载!!!
parent::__construct();
虎kvm泰aqtmh克hdp新ms_闻kji网oo版权所有,请勿未授权转载!!!
echo 'b';
虎uheie泰keofd克owrp_新ywf闻bxvcy网bh版权所有,请勿未授权转载!!!
}
虎zxs泰dkghu克ese新_isb闻koqjs网ck版权所有,请勿未授权转载!!!
}
虎mx泰wfat克xmm新r闻mm网yf_hz版权所有,请勿未授权转载!!!
虎l泰bneh克p新iv_ha闻gkb网plwrd版权所有,请勿未授权转载!!!
$test=new b();
虎oouji泰vn克r新efin闻dbp网wk版权所有,请勿未授权转载!!!
那么输出结果是:
虎zvi_f泰_jk克uo新bzuxo闻ikka网j版权所有,请勿未授权转载!!!
ab
虎ge泰f克otq新ty闻hepym网qsz版权所有,请勿未授权转载!!!
虎iwnxq泰isene克zxt新gjjv闻olne网pxcpq版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎yh泰gxnd克c新pk闻rfj网ez版权所有,请勿未授权转载!!!
虎voca泰tthy克ln新w闻ci网knsk版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎vzndg泰rvntn克nagl新k闻qut网ujd版权所有,请勿未授权转载!!!
虎np泰gs克sx新idg闻cuo网_vutd版权所有,请勿未授权转载!!!
BaseAction.class.php
虎bcemo泰i克_z新msuya闻bihe网mbqr版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎n_h泰zz_c克assrk新toe闻h网nz_版权所有,请勿未授权转载!!!
public function _initialize(){
虎l_泰mmoil克wuocv新au闻fhtgb网wk版权所有,请勿未授权转载!!!
echo 'baseAction';
虎hhqhx泰ksvv克ntpu新hx闻hv_zc网z版权所有,请勿未授权转载!!!
}
虎imbr泰a克y新fb_po闻bbdp_网av版权所有,请勿未授权转载!!!
}
虎w泰_s克b新l闻uy网kq版权所有,请勿未授权转载!!!
虎ggslu泰t克q新z闻rh网azo版权所有,请勿未授权转载!!!
IndexAction.class.php
虎kbpsa泰sgsv克mxdq新q闻m网gum版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎jxte泰ewl克g新oqdl闻yz网wxcr版权所有,请勿未授权转载!!!
public function (){
虎p泰d克htqfi新tz闻zxkz网sn版权所有,请勿未授权转载!!!
echo 'indexAction';
虎c泰idd_克txxsk新jo闻o网l版权所有,请勿未授权转载!!!
}
虎t泰m_克i新rfqsy闻erev网oxw版权所有,请勿未授权转载!!!
}
虎k泰zi克pnxs新fxuo闻robh网vvzsd版权所有,请勿未授权转载!!!
虎wgywv泰rnjn克obq新ibgl闻nlx网xus版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎zkfh泰f_ust克kdypg新wkw闻_k网r版权所有,请勿未授权转载!!!
baseActionindexAcition
虎_泰wggc克kqub新i闻qyh网xj_版权所有,请勿未授权转载!!!
虎wwuzt泰rf克ua新xikfi闻wb网kdws版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎i泰p克kazl新jms闻rdw网_ufx版权所有,请勿未授权转载!!!
虎_af泰dn_r克de新qfr闻s_yog网ej版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎_qbw泰j克at新i闻ehbh网l版权所有,请勿未授权转载!!!
ถ้าคุณมีข้อมูลอื่นๆใดๆเกี่ยวกับเรื่องนี้กรุณาเพิ่มฟรี
แสดงความคิดเห็น
-
ไม่มีข้อมูล