ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 4001
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎xzo泰a克zp新smlo闻cgxl网mjjt版权所有,请勿未授权转载!!!
虎at泰_ord克qg新_mazh闻oblb网epjk版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎mv泰fcom克tj新jzqv闻fesro网ug版权所有,请勿未授权转载!!!
虎ex泰jwblh克f新xjt闻fanq网bah_w版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎ism泰smu克dox新yjyf闻myia网hakpa版权所有,请勿未授权转载!!!
虎ym泰rwk克h新inxm闻d网yehg版权所有,请勿未授权转载!!!
a.php
虎o_y泰ud_克czput新xh闻fxrnv网gwjt版权所有,请勿未授权转载!!!
class a{
虎hec泰o克vq新tvyjh闻cftt网ezswc版权所有,请勿未授权转载!!!
function __construct(){
虎beo泰seb克t新ujjv闻txq网r版权所有,请勿未授权转载!!!
echo 'a';
虎ij泰kkm克hx_a新fyb闻kj网gacx版权所有,请勿未授权转载!!!
}
虎qe泰i_s_y克fwy新_bkt闻uw网ovg版权所有,请勿未授权转载!!!
}
虎rj泰s克jxl新g闻ff_h_网fxkwd版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎wgz泰lr克dl新vet闻rk_jy网ms版权所有,请勿未授权转载!!!
include 'a.php';
虎ne泰w克gps新hjse闻f网qvfa版权所有,请勿未授权转载!!!
class b extends a{
虎tit泰e克neko_新yegmg闻u网qmzw_版权所有,请勿未授权转载!!!
function __construct(){
虎k泰r克g_新tlpq闻xk网jkhhv版权所有,请勿未授权转载!!!
echo 'b';
虎ao泰ycd克r新chya闻un网t版权所有,请勿未授权转载!!!
}
虎wxcof泰tphg克wwb新y_as闻duqx网vfoa版权所有,请勿未授权转载!!!
}
虎tjqe泰_sn克z新in闻obpe网a版权所有,请勿未授权转载!!!
虎lglfs泰tooe_克b新m闻wg_zd网ev版权所有,请勿未授权转载!!!
$test=new b();
虎bh泰ntvj克dpw新gzca闻kaclk网_版权所有,请勿未授权转载!!!
运行结果:
虎u泰boo克bogzf新cnfo闻ir网lmq版权所有,请勿未授权转载!!!
b
虎ggb泰ktmzx克uppw新jowzc闻t网nu版权所有,请勿未授权转载!!!
虎uroer泰pnu克t新r闻hyi网nz版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎gdom泰vpn克rld新gftfd闻qsvxq网p版权所有,请勿未授权转载!!!
虎ybt_o泰wfz克eme新d闻urmtt网t版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎bhjen泰jk克zf新dl_a闻mdnw网cvncz版权所有,请勿未授权转载!!!
include 'a.php';
虎dha泰zjl克w新utylo闻opxet网udaeg版权所有,请勿未授权转载!!!
class b extends a{
虎vkkga泰bcf克dsp新bu闻zoq网fpu版权所有,请勿未授权转载!!!
function __construct(){
虎qzrzy泰pok克z新obh闻gnvtm网zrzwu版权所有,请勿未授权转载!!!
parent::__construct();
虎zcy泰qd克zhnt新st闻d网noaz版权所有,请勿未授权转载!!!
echo 'b';
虎u泰jzvjp克otxhw新lns闻byn网dypi版权所有,请勿未授权转载!!!
}
虎cob泰dtpc_克fzha新jps闻erkct网cu版权所有,请勿未授权转载!!!
}
虎huw_b泰_克drx新n闻ma网it版权所有,请勿未授权转载!!!
虎bcoyi泰mkql克c新voo闻b网gjw版权所有,请勿未授权转载!!!
$test=new b();
虎whjgy泰rh_克olq新wue闻ukmke网_mal版权所有,请勿未授权转载!!!
那么输出结果是:
虎oxn泰frevl克vcvsm新eqho闻dgtrd网ji版权所有,请勿未授权转载!!!
ab
虎n泰qq克ffkl新flko闻_qyop网xegdr版权所有,请勿未授权转载!!!
虎xyigl泰rru_l克a新qxn_闻p_oau网whpz版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎qqqwt泰_a克roo新ychwh闻fsgsk网dj版权所有,请勿未授权转载!!!
虎vbxpy泰hlcn克ngs新u闻yj网oyv版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎i_x泰l克je新uc闻bj网sj版权所有,请勿未授权转载!!!
虎da泰bb克wvypx新oyby闻dpbth网qlgk版权所有,请勿未授权转载!!!
BaseAction.class.php
虎w泰crs克bmu新pb闻jraol网lu版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎zgfsc泰rcjd克vwkn新t闻va网lmlua版权所有,请勿未授权转载!!!
public function _initialize(){
虎i泰r克r新k闻n网l_版权所有,请勿未授权转载!!!
echo 'baseAction';
虎tvl泰xfwb克n新rxbwv闻fw网d_an版权所有,请勿未授权转载!!!
}
虎qdmhs泰xvt克p_ge新sr_wz闻gifm网idpp版权所有,请勿未授权转载!!!
}
虎x_km泰bkbw克bksr新i闻urqm网j_nii版权所有,请勿未授权转载!!!
虎y泰q克bpvh新jbd闻avwht网qb版权所有,请勿未授权转载!!!
IndexAction.class.php
虎x泰ct克xier新qdgo闻lmnyg网aqus版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎hazet泰e克sq新s_vb闻av网yr版权所有,请勿未授权转载!!!
public function (){
虎uawg泰n克r新htlg闻kwxk网q版权所有,请勿未授权转载!!!
echo 'indexAction';
虎bx泰uyn克pcsf新xavqq闻h网cr版权所有,请勿未授权转载!!!
}
虎mmkpd泰apqyg克rpf新e_闻dhlq网d_yh版权所有,请勿未授权转载!!!
}
虎ggqsg泰_ebiu克lcqvv新u闻rqo网kzr版权所有,请勿未授权转载!!!
虎anxz泰m克bct_新pgg闻gb_网fkr版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎kxck泰qzv克pd新jve闻i网zk版权所有,请勿未授权转载!!!
baseActionindexAcition
虎vct泰gsr克xgpeo新i_vsd闻o网t版权所有,请勿未授权转载!!!
虎myl泰sqjty克ovdn新zohjs闻ug网ue__l版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎wye泰pe克o新yb闻n网wcfm版权所有,请勿未授权转载!!!
虎aqy泰cy克zmd新lzr_q闻hmqh网_ijn版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎ww泰lizwu克wyu新_闻d网bszt版权所有,请勿未授权转载!!!
Δήλωση: όλα τα άρθρα / τα σχέδια που αναδημοσιεύονται στον δικτυακό τόπο έχουν ως σκοπό τη διαβίβαση περισσότερων πληροφοριών και τη διευκόλυνση της συζήτησης, πράγμα που δεν σημαίνει ότι ο δικτυακός τόπος, ο οικοδεσπότης και ο διοργανωτής συμφωνούν με τις απόψεις τους ή επιβεβαιώνουν τη γνησιότητα του περιεχομένου τους. Τα περιεχόμενα των άρθρων είναι μόνο για αναφορά. Εάν παραβιαστούν τα δικαιώματα του αρχικού συγγραφέα, επικοινωνήστε με τον διαχειριστή του δικτυακού τόπου.
Λίστα σχολίων
-
Δεν υπάρχουν δεδομένα