ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 3152
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎nsbwh泰qggf克vgn新pw_ph闻rdye网hu版权所有,请勿未授权转载!!!
虎vuq泰_tvc克l新qvp闻heg网v版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎klx泰d克s新a闻otwi网_ybp版权所有,请勿未授权转载!!!
虎g泰lx克nury新pvx_闻tdbt网kkdw版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎rb泰x克xrp新dlctr闻x_j网hwm版权所有,请勿未授权转载!!!
虎zor泰jxf克hug新kme闻tqhjy网wjwr版权所有,请勿未授权转载!!!
a.php
虎jnb泰_yk克aay新nm闻zkrjz网twsh版权所有,请勿未授权转载!!!
class a{
虎dmib泰lbrt克vh新hmkjp闻tj网bqn版权所有,请勿未授权转载!!!
function __construct(){
虎br泰w克c新nlk_闻cpex网kr版权所有,请勿未授权转载!!!
echo 'a';
虎iwnou泰egz克yr新_kzd闻qmefs网pv版权所有,请勿未授权转载!!!
}
虎bqln泰j克wcu新om闻k网h版权所有,请勿未授权转载!!!
}
虎epkkz泰ukkjl克eqxbx新thg闻jo网j_b版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎f_j泰g克mld新itbl闻rw网fei版权所有,请勿未授权转载!!!
include 'a.php';
虎aqbf泰c_qmr克hdlc新mepz闻stq网akg_v版权所有,请勿未授权转载!!!
class b extends a{
虎cjozl泰haqj克zqy新vo闻fotj网qhiu版权所有,请勿未授权转载!!!
function __construct(){
虎r泰m克dleea新krhz闻ezwc网s版权所有,请勿未授权转载!!!
echo 'b';
虎itf泰lkfsa克tjo新gdj闻y网daae版权所有,请勿未授权转载!!!
}
虎nf泰nv克vlck新fzquq闻at网qoqi版权所有,请勿未授权转载!!!
}
虎h泰zxz克frwt新vaeno闻ows网nwr版权所有,请勿未授权转载!!!
虎dv泰q克j新qg闻iqr网nb版权所有,请勿未授权转载!!!
$test=new b();
虎qhyk泰anpl克ta新yr闻lkigp网z版权所有,请勿未授权转载!!!
运行结果:
虎fxqtm泰msuli克gnme新bdi闻bj网on版权所有,请勿未授权转载!!!
b
虎ln泰icdv克uq新f闻jw网u版权所有,请勿未授权转载!!!
虎_pgu泰yqre克oz新g闻bxj网rvwlg版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎a泰zaz克v新jir闻hw网trd版权所有,请勿未授权转载!!!
虎ijbg泰qz克b新ehz闻sgmt网zhf版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎c泰uikez克vwgig新mtc闻texp网c版权所有,请勿未授权转载!!!
include 'a.php';
虎lw泰tx克zik新b闻po网fbw版权所有,请勿未授权转载!!!
class b extends a{
虎c泰luc克mp新vyuik闻f_网ovxf版权所有,请勿未授权转载!!!
function __construct(){
虎daosx泰bek克yfjze新xslm闻afhlq网ky版权所有,请勿未授权转载!!!
parent::__construct();
虎cs泰dt克zdz新bqmwh闻dmo网e版权所有,请勿未授权转载!!!
echo 'b';
虎vzke泰rvxn克z新in闻yb网hzepw版权所有,请勿未授权转载!!!
}
虎lncpq泰nmwj克lpq新trv闻msfe网du版权所有,请勿未授权转载!!!
}
虎oijy泰zyzh克lri新fxs闻e网bm版权所有,请勿未授权转载!!!
虎txqhx泰bwv克et新shq闻e网fdvh版权所有,请勿未授权转载!!!
$test=new b();
虎b泰y_克nvur新vni闻zls网yaq版权所有,请勿未授权转载!!!
那么输出结果是:
虎aooqe泰f_q克niywq新aghm闻a_sr网ax版权所有,请勿未授权转载!!!
ab
虎v泰f克yrdq新qi闻t网mayc版权所有,请勿未授权转载!!!
虎x泰n克uf新eealj闻hqkf网w版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎q泰r克uo新_tlpe闻i网t版权所有,请勿未授权转载!!!
虎ud泰alzu_克bhwx新ruw闻xhfi网wq版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎myq_泰sn克td新t闻dqav网wa版权所有,请勿未授权转载!!!
虎agofb泰zswem克dc新axhwn闻kotxj网keyx版权所有,请勿未授权转载!!!
BaseAction.class.php
虎nn泰o克vggy新_闻th网xsrdl版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎fli泰lrjmd克lj新j闻w网k_lqi版权所有,请勿未授权转载!!!
public function _initialize(){
虎csb泰dy克nho新pnp闻hukwq网tf版权所有,请勿未授权转载!!!
echo 'baseAction';
虎zh泰w克xsnol新irbp闻tukb网mai版权所有,请勿未授权转载!!!
}
虎g泰ccij克j新izpx闻ceg_u网blts版权所有,请勿未授权转载!!!
}
虎rqkrd泰fvse克ko新e闻pz网xcs版权所有,请勿未授权转载!!!
虎dta泰thp克le新_ocu闻tbjr网frf版权所有,请勿未授权转载!!!
IndexAction.class.php
虎jll泰d克dp新g闻k网cs版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎ygkrm泰wzkfp克_t新_b闻vfcx网lyshq版权所有,请勿未授权转载!!!
public function (){
虎qbr泰tq克nvacl新azbi闻vw网n版权所有,请勿未授权转载!!!
echo 'indexAction';
虎q_tfm泰nsrkn克rilvu新zweh闻pz网tecfn版权所有,请勿未授权转载!!!
}
虎ucrcx泰izunl克f新pka闻wxy网yts版权所有,请勿未授权转载!!!
}
虎ois泰gzfc克ssya新jnb闻iv网qin版权所有,请勿未授权转载!!!
虎vvns泰z克eqnxj新rp_ob闻kiql网ydn版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎pnm泰d克w新geyio闻st_gr网q版权所有,请勿未授权转载!!!
baseActionindexAcition
虎qkl泰dc克tlp新rhd闻ko网ukocl版权所有,请勿未授权转载!!!
虎j泰rct克t新ap闻cb_网dbdpt版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎tnz_e泰ij克ls新uq闻vg网inc版权所有,请勿未授权转载!!!
虎rw泰dcygu克to新q闻zgf网bix版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎utj泰yuohz克nok新e闻mu网lv版权所有,请勿未授权转载!!!
声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。
评论列表
-
暂无数据