ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 5742
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎t泰s克hh新dboz闻p网n版权所有,请勿未授权转载!!!
虎kjn泰xnrlc克gc新y闻zkfp网h版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎hslff泰l克n新hv闻dv网b_版权所有,请勿未授权转载!!!
虎ldpxc泰ia克_ciw_新f闻iwua网uy版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎tp_泰zoe克zzi新a闻tvzmn网bfo_版权所有,请勿未授权转载!!!
虎z泰sunf克eu新_z闻w网ngf版权所有,请勿未授权转载!!!
a.php
虎kpha泰i克xxfv新biozb闻esuyb网yv版权所有,请勿未授权转载!!!
class a{
虎z泰puza克l_nbh新dlilw闻eyx网asuyf版权所有,请勿未授权转载!!!
function __construct(){
虎vp泰aqmej克bqgft新aqyo闻lqr网joqih版权所有,请勿未授权转载!!!
echo 'a';
虎f泰c克rnfs新thmct闻f网fg版权所有,请勿未授权转载!!!
}
虎ia泰k_w克hkaa新ana闻y_网sol版权所有,请勿未授权转载!!!
}
虎qre泰jq克lvv新werr闻po网ll版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎hbmco泰pcf克t新qqyb闻fk网it版权所有,请勿未授权转载!!!
include 'a.php';
虎oyv泰dfnc克u新kn闻rgi网ypw版权所有,请勿未授权转载!!!
class b extends a{
虎yynn泰bm克k新yob闻zz网rtcns版权所有,请勿未授权转载!!!
function __construct(){
虎fln泰lgh克yip新oinhe闻tkq网jdrn版权所有,请勿未授权转载!!!
echo 'b';
虎kgfub泰bxvqx克gc_sj新xdjl闻kkmgp网_jgb版权所有,请勿未授权转载!!!
}
虎bzmy泰kdula克kdb新uu闻qnd网u_hbz版权所有,请勿未授权转载!!!
}
虎x泰wa克n新zt闻pvw网ayktw版权所有,请勿未授权转载!!!
虎ucw泰iasbq克pafv新kb闻x网sdzi版权所有,请勿未授权转载!!!
$test=new b();
虎bib泰glba克ujw新i_z闻e网b版权所有,请勿未授权转载!!!
运行结果:
虎e泰qd克k新minj闻gndhg网jmfnr版权所有,请勿未授权转载!!!
b
虎rs泰vto克ntdk新f闻nfc网f版权所有,请勿未授权转载!!!
虎v泰wzrq克gfopp新vx闻yrm_c网ralo版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎l泰soil克i新tppph闻g网qti版权所有,请勿未授权转载!!!
虎rda泰vq克whuj新g闻djck网we_版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎uua泰zaowg克hvnv新mycsf闻bw网fwga版权所有,请勿未授权转载!!!
include 'a.php';
虎ejzo泰ujnfl克ph新txtb闻lnkbf网unh版权所有,请勿未授权转载!!!
class b extends a{
虎jmde泰bfuob克p_cn新ss闻nap网wai版权所有,请勿未授权转载!!!
function __construct(){
虎az泰ph克eawr新f_n闻xqqh_网ca版权所有,请勿未授权转载!!!
parent::__construct();
虎hp泰izzn克iiow新n闻ijxg网x版权所有,请勿未授权转载!!!
echo 'b';
虎r_泰dsfls克ydiba新rc闻wkmzw网dgus版权所有,请勿未授权转载!!!
}
虎csqy泰g克z新rqshw闻oi网_版权所有,请勿未授权转载!!!
}
虎qxn泰l克q新izu闻dhqso网jl版权所有,请勿未授权转载!!!
虎cjb泰exj克dbqz新zr闻c网j版权所有,请勿未授权转载!!!
$test=new b();
虎vemgk泰sas克pnrdn新r闻mdj网d版权所有,请勿未授权转载!!!
那么输出结果是:
虎hojf泰y克vz新wgm闻lu网jah版权所有,请勿未授权转载!!!
ab
虎gol泰yaon克cf新a闻e网rtubr版权所有,请勿未授权转载!!!
虎v泰ywj克dm新tbnlr闻nrchr网dih版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎mzupp泰h克m新qhp闻fbx网ts版权所有,请勿未授权转载!!!
虎m泰imbe克uour新ohd__闻eugk网gvi版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎ainl泰x克c新v闻xaqtr网z版权所有,请勿未授权转载!!!
虎neoxl泰_y克xe新vws闻_t网qzvr版权所有,请勿未授权转载!!!
BaseAction.class.php
虎spzn泰k克f新puusp闻vbaln网z版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎n泰sy_克zu新anjlz闻_vv_t网f版权所有,请勿未授权转载!!!
public function _initialize(){
虎ipke泰wyp克is新_llr闻a网r版权所有,请勿未授权转载!!!
echo 'baseAction';
虎fip泰yhmxf克jgn新alsv闻u网zb版权所有,请勿未授权转载!!!
}
虎xrie泰a克fkjov新wnd闻wabno网jkjf版权所有,请勿未授权转载!!!
}
虎xcmja泰iiqsw克spy新tshy闻iool网qwof版权所有,请勿未授权转载!!!
虎bqri泰kzvzu克fqdrh新uejvx闻zamny网__bf版权所有,请勿未授权转载!!!
IndexAction.class.php
虎a泰e克vr新ytnx闻s_ylo网c版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎pqur泰yjn克y新x闻ob网nw版权所有,请勿未授权转载!!!
public function (){
虎msitu泰g克dn新ywafp闻dzcb网u版权所有,请勿未授权转载!!!
echo 'indexAction';
虎rso泰o克gm新zrkqu闻mm网wore版权所有,请勿未授权转载!!!
}
虎eg_bh泰g克rg新ir闻yvq网ly版权所有,请勿未授权转载!!!
}
虎p泰a_克vcmp新xp闻iux网n版权所有,请勿未授权转载!!!
虎acru泰dha克zgq新qn闻x_w网m版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎q泰v克uhtz新hzsf闻nzgg网b版权所有,请勿未授权转载!!!
baseActionindexAcition
虎p泰k克pbpq新f闻thp网pf版权所有,请勿未授权转载!!!
虎hy泰adsiv克ju新uvmz闻_l网gt版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎vpvm泰xvtk克fdaq新hvgqz闻ov网jsyuc版权所有,请勿未授权转载!!!
虎nspau泰s_ne克ha新aqhp闻np_nr网zaxrf版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎scyxu泰ip克ncd新xekin闻lfq网rxld版权所有,请勿未授权转载!!!
Verklaring: alle artikelen /tekeningen die op deze website worden weergegeven, zijn bedoeld om meer informatie te verzenden en de discussie te vergemakkelijken, wat niet betekent dat de website, de host en de organisator het eens zijn met hun meningen of de authenticiteit van hun inhoud bevestigen. De inhoud van de artikelen is alleen voor referentie. Indien de rechten van de oorspronkelijke auteur worden geschonden, neem dan contact op met de beheerder van de website.
Lijst van opmerkingen
-
Geen gegevens