ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 1993
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎nmwxt泰zdwmm克edpx新mc闻bqkr网gt版权所有,请勿未授权转载!!!
虎uz泰rvdv克ipd新ddg闻ji网tzcu版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎tsn泰euf克bqk新mu闻p_网vfp版权所有,请勿未授权转载!!!
虎gt泰yqct克gkemj新aumyf闻kmc网wfji版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎n泰leqjo克qstnt新r闻igb网yw版权所有,请勿未授权转载!!!
虎yxluu泰y_uuv克oer新q闻c网oetvt版权所有,请勿未授权转载!!!
a.php
虎e泰k克m新vch闻edjk网y版权所有,请勿未授权转载!!!
class a{
虎al泰s克otn新uty闻yk网g版权所有,请勿未授权转载!!!
function __construct(){
虎l泰bp克f新bm闻ilq网usvw版权所有,请勿未授权转载!!!
echo 'a';
虎rtv泰fbmv克_sgq_新sd闻tgdd网wp版权所有,请勿未授权转载!!!
}
虎acxtg泰mc克u新rcxw闻ed网aj版权所有,请勿未授权转载!!!
}
虎bsx泰e克zavag新qmzln闻aaifs网hhb_y版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎dzh泰ql克w_t新gn闻v_u网j_t版权所有,请勿未授权转载!!!
include 'a.php';
虎pwvkp泰qr克tln新gtpvb闻gak网te版权所有,请勿未授权转载!!!
class b extends a{
虎pgnzw泰joyam克bqwh新xmnk闻ku网y版权所有,请勿未授权转载!!!
function __construct(){
虎rh泰zknzu克zl新drpvq闻byjp网o版权所有,请勿未授权转载!!!
echo 'b';
虎wuk泰alcuj克ewgcx新pjpl闻ed网wcqr版权所有,请勿未授权转载!!!
}
虎uzb泰cax克kqzz新k闻ah网ubngs版权所有,请勿未授权转载!!!
}
虎pu泰jo克smvye新ap闻v网fgc版权所有,请勿未授权转载!!!
虎w泰kvx克sp新ttr闻vl网cvz版权所有,请勿未授权转载!!!
$test=new b();
虎tbmmr泰e克r新myfda闻bi网eg版权所有,请勿未授权转载!!!
运行结果:
虎n泰h克mdfis新ebdqd闻w网cn版权所有,请勿未授权转载!!!
b
虎qyii_泰vjas克wl新sfaav闻j_rs网j版权所有,请勿未授权转载!!!
虎c泰utrb克sgzt_新l闻d网s版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎ms泰nsk_克poll新w闻fmv网indmj版权所有,请勿未授权转载!!!
虎yp泰yzbt克kt新lk闻tbj网spkk版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎u泰qmwmw克_新mhbp闻u网vxr版权所有,请勿未授权转载!!!
include 'a.php';
虎ijc泰qo克hep新cv闻fag网cnwrr版权所有,请勿未授权转载!!!
class b extends a{
虎cn泰hqg克j新x_k闻td网kyqp版权所有,请勿未授权转载!!!
function __construct(){
虎azxm泰sbrj克dufx新pwwc闻gk网if版权所有,请勿未授权转载!!!
parent::__construct();
虎z泰o克szcp新xv闻l网_tw版权所有,请勿未授权转载!!!
echo 'b';
虎k泰papwl克fkf新yz闻po网xk版权所有,请勿未授权转载!!!
}
虎x泰iom克g新tzljd闻gq_xn网xx版权所有,请勿未授权转载!!!
}
虎mwz泰nnagp克vty新qn闻cz网ubgqw版权所有,请勿未授权转载!!!
虎voe泰nml_克ihzp新ka闻hp网ccoxq版权所有,请勿未授权转载!!!
$test=new b();
虎j泰hwo克dk新l闻qbf网wi版权所有,请勿未授权转载!!!
那么输出结果是:
虎k泰tcrbx克t新ht闻c_t网vn_c版权所有,请勿未授权转载!!!
ab
虎nczew泰an克tmrav新l_f闻nvkv网t版权所有,请勿未授权转载!!!
虎w泰ui_px克jxh新ciev闻o网zkbb版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎ayln泰mworo克v新t闻aoonu网z版权所有,请勿未授权转载!!!
虎azz泰kd克mw新e_ke闻w_l网o版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎pypc_泰z克dmfx新k_mpa闻v网ok_d版权所有,请勿未授权转载!!!
虎iq泰scyi克szf新od闻e网kyrc_版权所有,请勿未授权转载!!!
BaseAction.class.php
虎k泰ifpc_克gg新qy闻ue网osy版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎mmd泰jnfhl克evb新eyapd闻_d网awk版权所有,请勿未授权转载!!!
public function _initialize(){
虎lgu泰yx克p新ohqc闻jpb网z_版权所有,请勿未授权转载!!!
echo 'baseAction';
虎i泰ig克vpg新mnpnx闻v网jegp版权所有,请勿未授权转载!!!
}
虎ybk泰o克ps新ytbh闻fhw网bhw版权所有,请勿未授权转载!!!
}
虎gs泰wsqp克yjtmf新azqid闻bntg网urac版权所有,请勿未授权转载!!!
虎fkay泰w克xo新yoct闻ytqej网tfr版权所有,请勿未授权转载!!!
IndexAction.class.php
虎kbc泰vlmy克szb新xcjm闻gjzs网wisc版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎ga泰pzyad克_m新e闻bu网qxdd版权所有,请勿未授权转载!!!
public function (){
虎ivnrz泰obe克v新ml闻x网zazqo版权所有,请勿未授权转载!!!
echo 'indexAction';
虎fz泰yrdw克mxd新zvwr闻v网kg版权所有,请勿未授权转载!!!
}
虎rmu泰e_hk克ecvx新jeo闻k网cdeaf版权所有,请勿未授权转载!!!
}
虎oiicm泰pabna克m新tkj闻w网c版权所有,请勿未授权转载!!!
虎xi_泰mokzp克zkl新yejrn闻jsac_网stg版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎x泰exxk克jbqz_新rl闻dec网bixo版权所有,请勿未授权转载!!!
baseActionindexAcition
虎a泰hw克y新ryxk闻c网i版权所有,请勿未授权转载!!!
虎o泰osy克xpm_l新gghxz闻gr网acxan版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎j_泰kkvl克vfru新ospte闻mqo网gyk版权所有,请勿未授权转载!!!
虎_fpse泰hhgiy克do新cxx闻etukj网e版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎euj泰umlh克lqbdr新wx闻x网gr版权所有,请勿未授权转载!!!
성명: 본 사이트 에 옮 겨 실 린 문서 / 그림 등 원 고 는 모두 더 많은 정 보 를 전달 하고 토론 하 는 목적 에서 본 사이트 와 주최, 담당 부서 가 자신의 의견 을 찬성 하거나 그 내용 의 진실성 을 증명 하 는 것 을 의미 하지 않 는 다. 글 의 내용 은 참고 로 제공 하고 원작 자의 권 리 를 침해 하면 사이트 관리자 에 게 연락 하 십시오.
평론 목록
-
일시 데이터 없음