ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 3156
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎usrob泰pk克ligc新qcre闻hrm网d版权所有,请勿未授权转载!!!
虎gkn泰kg克m新tv闻rk网o版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎bkr泰_pylq克vy新sgad闻xvznp网vsle版权所有,请勿未授权转载!!!
虎twu泰arqig克ue新_feyb闻itb网_d版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎xdfi泰dm_克v新rxhz闻i网xjg版权所有,请勿未授权转载!!!
虎fg泰wtlb克buzsl新iaq闻g网romq版权所有,请勿未授权转载!!!
a.php
虎njupi泰bvox克ubl新ynawp闻duvu网fezd版权所有,请勿未授权转载!!!
class a{
虎zmb泰ui克g新z闻dttj网ieqp版权所有,请勿未授权转载!!!
function __construct(){
虎_umv泰ram克rjn新ltzjy闻h网gn版权所有,请勿未授权转载!!!
虎gesao泰xlws克_pd新xbngu闻xwjrf网ohepy版权所有,请勿未授权转载!!!
}
虎sop泰z克vo_u新l闻pli网os版权所有,请勿未授权转载!!!
}
虎m泰gfjhv克vfv新_j闻d网q版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎zjjye泰xwqkl克lt_新hag_闻hw网px版权所有,请勿未授权转载!!!
include 'a.php';
虎zlpqp泰wom克lei新h闻m网v版权所有,请勿未授权转载!!!
class b extends a{
虎heydq泰yv_zy克kotzh新mlfdo闻vr网xl版权所有,请勿未授权转载!!!
function __construct(){
虎owwqq泰dqum克ahnrs新aku闻tacw网nm版权所有,请勿未授权转载!!!
echo 'b';
虎hvkqr泰bcn克u__p新h闻hbmm网jp版权所有,请勿未授权转载!!!
}
虎whj泰tyh克qdoh新a闻y_网bwn版权所有,请勿未授权转载!!!
}
虎niwb泰xp克p新_xgw闻enyqx网dgat版权所有,请勿未授权转载!!!
虎xlqp泰r克psyu新fkgml闻a网akeg版权所有,请勿未授权转载!!!
$test=new b();
虎lm泰spab克qhnt新sdios闻pqo网foc版权所有,请勿未授权转载!!!
运行结果:
虎_s泰brwjx克bak新otbi闻s网kha版权所有,请勿未授权转载!!!
b
虎gsw泰u_e克jflw_新nqwj闻_uhuo网v版权所有,请勿未授权转载!!!
虎srhwq泰m克x_新mf闻ikdn网ya版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎ap泰oavdy克qot新l闻kvptb网fmk版权所有,请勿未授权转载!!!
虎rsc泰bl克_gy新y闻wpy网d版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎nl泰n克fm新j闻e网e版权所有,请勿未授权转载!!!
include 'a.php';
虎fwtjc泰fqxmg克mth新qnx_j闻rkqzq网h版权所有,请勿未授权转载!!!
class b extends a{
虎jrm泰kfp克iydtx新yr闻lvfev网u版权所有,请勿未授权转载!!!
function __construct(){
虎fgq泰ccxjf克xlo新l闻onf网_版权所有,请勿未授权转载!!!
parent::__construct();
虎x泰bzmpm克vnl新lmzk闻h网wdqm版权所有,请勿未授权转载!!!
echo 'b';
虎hyyg泰ya克m新vlxf闻vlh网nbmc版权所有,请勿未授权转载!!!
}
虎yhp_泰f克bjhh新nck闻slota网cxu版权所有,请勿未授权转载!!!
}
虎_f泰ccz克cw新ntkht闻inik网k版权所有,请勿未授权转载!!!
虎m泰pudyc克wenbm新ixin闻bvy网c版权所有,请勿未授权转载!!!
$test=new b();
虎fi泰vpne克rkvmg新qct闻bs网ylypz版权所有,请勿未授权转载!!!
那么输出结果是:
虎f泰p克hxsv新xt_闻zp网qqh版权所有,请勿未授权转载!!!
ab
虎ccp泰ygw克h新lq闻n网aq版权所有,请勿未授权转载!!!
虎w泰wrs克rx新mpv闻_ply网zc版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎fuhsd泰rlu克nxk新batl闻k网kxdh版权所有,请勿未授权转载!!!
虎avs泰usd克rq新l闻e网vupxv版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎c泰j克fa新hydjs闻mgmo网xexm版权所有,请勿未授权转载!!!
虎zcuzr泰krufq克ooqqg新oj闻rbg网ie版权所有,请勿未授权转载!!!
BaseAction.class.php
虎_jtd泰ysax克quvs新bwh闻o网mzsr版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎zfi泰lht克dmqv新cfjbv闻wdui网rvn版权所有,请勿未授权转载!!!
public function _initialize(){
虎uz泰dbp克vbivi新jm闻fyio网rexre版权所有,请勿未授权转载!!!
echo 'baseAction';
虎b泰on克h新wdxbz闻vt网q版权所有,请勿未授权转载!!!
}
虎yyra泰rn克_新ctw闻ron网tbp版权所有,请勿未授权转载!!!
}
虎kijov泰g克pqpgn新tvbf闻nagl网ne版权所有,请勿未授权转载!!!
虎xk_xz泰egutg克ihm新owph闻bgsb_网ibi版权所有,请勿未授权转载!!!
IndexAction.class.php
虎v泰eama克l新epls闻kuk网_xv版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎ysxs泰rpwla克qyqjg新rcif闻fmlmn网dttn版权所有,请勿未授权转载!!!
public function (){
虎ez泰gk克o新x闻ukmn网yo版权所有,请勿未授权转载!!!
echo 'indexAction';
虎iyhi泰_克bppf新_le闻e网coe版权所有,请勿未授权转载!!!
}
虎q泰ibghv克tayq新vdqgs闻s_a网yrv版权所有,请勿未授权转载!!!
}
虎twaa泰a克wvyn新cjm闻wnq网rg_版权所有,请勿未授权转载!!!
虎hxpm泰tdmq克en新pahoz闻vnbnz网gvo版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎ggfoq泰be克sj新ln闻zl网a版权所有,请勿未授权转载!!!
baseActionindexAcition
虎ymyx泰b克cj新shb闻px网iftdl版权所有,请勿未授权转载!!!
虎wcel泰fci克pqyp新laptu闻flbi网v版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎yyos泰von克x新vr闻f_网zyc版权所有,请勿未授权转载!!!
虎yn泰d_克bkkr新iahe闻qqd网yu版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎othb泰juvqz克d新e闻wk网uuxeg版权所有,请勿未授权转载!!!
Δήλωση: όλα τα άρθρα / τα σχέδια που αναδημοσιεύονται στον δικτυακό τόπο έχουν ως σκοπό τη διαβίβαση περισσότερων πληροφοριών και τη διευκόλυνση της συζήτησης, πράγμα που δεν σημαίνει ότι ο δικτυακός τόπος, ο οικοδεσπότης και ο διοργανωτής συμφωνούν με τις απόψεις τους ή επιβεβαιώνουν τη γνησιότητα του περιεχομένου τους. Τα περιεχόμενα των άρθρων είναι μόνο για αναφορά. Εάν παραβιαστούν τα δικαιώματα του αρχικού συγγραφέα, επικοινωνήστε με τον διαχειριστή του δικτυακού τόπου.
Λίστα σχολίων
-
Δεν υπάρχουν δεδομένα