ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 3144
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎hli泰ylut克joy新z闻v网ep版权所有,请勿未授权转载!!!
虎veb泰yl克l新ien闻vsser网qvsp版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎qjn泰agg克vfmq新rqp_w闻df网qh版权所有,请勿未授权转载!!!
虎d泰yb克m新asr闻mp网rulv版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎saum泰wvmv克bif新x闻sbke网rsuve版权所有,请勿未授权转载!!!
虎lc泰_fwm克r新t闻gbk网b版权所有,请勿未授权转载!!!
a.php
虎w_n泰knkyc克a新b闻oleoj网lkiy版权所有,请勿未授权转载!!!
class a{
虎ojv泰yctk克iq新_v闻fvoyr网wesc版权所有,请勿未授权转载!!!
function __construct(){
虎_x泰a克np新ovi闻_q网fi版权所有,请勿未授权转载!!!
echo 'a';
虎rd泰eg克dbtf新nzk闻_网jif版权所有,请勿未授权转载!!!
}
虎kacq泰byxf克nbe新qlovv闻vtmnx网afg_d版权所有,请勿未授权转载!!!
}
虎pwgqy泰y_u克uqkk新sho闻b_网p版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎dz泰io克xlr新etxb闻_gnv网kjo版权所有,请勿未授权转载!!!
include 'a.php';
虎hoawh泰ujocn克yoly新bfqb闻wyrtf网p版权所有,请勿未授权转载!!!
class b extends a{
虎lf泰ww克ddeqa新jcbgr闻vywk网n版权所有,请勿未授权转载!!!
function __construct(){
虎pzhzk泰jy克_v新cn闻iyeg网ne版权所有,请勿未授权转载!!!
echo 'b';
虎c_zy泰wct_m克d_q新qlxqy闻p网rgxlf版权所有,请勿未授权转载!!!
}
虎q泰yz克uou新v闻_k网o版权所有,请勿未授权转载!!!
}
虎yzg泰bn克efi新omcga闻dxgei网ib版权所有,请勿未授权转载!!!
虎mmm泰qbx克k新nzohw闻ivrnf网zafk版权所有,请勿未授权转载!!!
$test=new b();
虎iv泰bjcbs克xocmk新xqm闻gs网yi版权所有,请勿未授权转载!!!
运行结果:
虎x泰p克knm新zgkei闻klju网dm版权所有,请勿未授权转载!!!
b
虎goe泰z克ey新tgsff闻fn网_f版权所有,请勿未授权转载!!!
虎zwjhy泰hebxn克inmq新j闻s网kyw版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎goewu泰jdiup克va新mgh闻ohfx网wqylx版权所有,请勿未授权转载!!!
虎qi泰nnm克mm新dnwd闻ce网klq版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎amaj泰bt克ph新abvdu闻cf网k版权所有,请勿未授权转载!!!
include 'a.php';
虎f泰pfw克m新bp闻lxi网wrp版权所有,请勿未授权转载!!!
class b extends a{
虎_arq泰li克h新q闻bkjbq网vj版权所有,请勿未授权转载!!!
function __construct(){
虎c泰t克agdg新bx闻yc_dv网twdf版权所有,请勿未授权转载!!!
parent::__construct();
虎jk泰ktai克bgyd新u_psx闻l网eayoi版权所有,请勿未授权转载!!!
echo 'b';
虎iowy泰hltn克fmpj新vswj闻iyshu网pfry版权所有,请勿未授权转载!!!
}
虎_sfbc泰m克ekb新ga闻mden网v版权所有,请勿未授权转载!!!
}
虎gdyi泰_克td新poc闻ozqxd网b版权所有,请勿未授权转载!!!
虎cpaz泰q克uk新b闻kgte网rp版权所有,请勿未授权转载!!!
$test=new b();
虎yhzar泰necs克wg新m闻mvz网nxgq版权所有,请勿未授权转载!!!
那么输出结果是:
虎egnii泰qi克et新zmiz闻nn网h版权所有,请勿未授权转载!!!
ab
虎_nzz泰meg克wvq新rnl闻ks网hy版权所有,请勿未授权转载!!!
虎_ajaz泰y_克npx新po闻new网cwxvl版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎sm_d泰oi克i新wvx闻zc网m版权所有,请勿未授权转载!!!
虎k泰qrc克ojr新bqqf闻pjyvu网eygy版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎d泰ipz克wzgg新t闻cal网bu版权所有,请勿未授权转载!!!
虎dr泰fauli克m新b闻ymr网_sn版权所有,请勿未授权转载!!!
BaseAction.class.php
虎m_fo泰upvj克f新aa_g闻wo网psyp版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎z_泰h克jeg新uaca闻hp网y版权所有,请勿未授权转载!!!
public function _initialize(){
虎z泰xt克_wil新nan闻oed网yrnt版权所有,请勿未授权转载!!!
echo 'baseAction';
虎hfxq泰_d克rfotg新vivtr闻jz网u版权所有,请勿未授权转载!!!
}
虎rxv泰gjt克peu新yfwne闻ribj网o版权所有,请勿未授权转载!!!
}
虎u泰f_nzq克g新a闻prshm网igizw版权所有,请勿未授权转载!!!
虎v泰jwrub克erxv新kcli闻uxap网_lbfq版权所有,请勿未授权转载!!!
IndexAction.class.php
虎tyorm泰iiig克wse新tcf闻ipj网cgrm版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎vrij泰xf克ye新zo闻ze网tmx版权所有,请勿未授权转载!!!
public function (){
虎onyib泰xxw克h_clf新hppo闻z网oyxr版权所有,请勿未授权转载!!!
echo 'indexAction';
虎mgu泰jsea克vqc新o闻ld网c版权所有,请勿未授权转载!!!
}
虎o_ztf泰p克whd_新yap闻vt网_jlp版权所有,请勿未授权转载!!!
}
虎v泰g克k新cja闻v网d版权所有,请勿未授权转载!!!
虎z_l泰qt克vgv新e闻blu_网l_版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎y泰jw克jcck新ld闻i网_k_tj版权所有,请勿未授权转载!!!
baseActionindexAcition
虎t泰bqwl克vluh新tiu闻nn网dnx版权所有,请勿未授权转载!!!
虎udou泰inw克r新ff_th闻mtc网e版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎cmvy泰fldfi克rddu新xu闻jshi网qjhps版权所有,请勿未授权转载!!!
虎h泰l克_d新jtx闻w网ojzl版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎vq泰vdedi克te新km闻ien网o版权所有,请勿未授权转载!!!
Dichiarazione: tutti gli articoli / disegni riprodotti su questo sito web hanno lo scopo di trasmettere più informazioni e facilitare la discussione, il che non significa che il sito web, l'host e l'organizzatore siano d'accordo con le loro opinioni o confermino l'autenticità dei loro contenuti. I contenuti degli articoli sono di riferimento. Se i diritti dell'autore originale sono violati, si prega di contattare l'amministratore del sito web.
Commento elenco
-
Nessun dato