虎泰克博客

ThinkPHP中_initialize()和__construct()的不同


ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函

ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?

虎gm泰vz克u新bivq闻md网whs版权所有,请勿未授权转载!!!

 

虎aahc泰rr克_m_gm新m闻dq网hpyd版权所有,请勿未授权转载!!!

在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?

虎p泰zcc克qo新e闻elgnw网y版权所有,请勿未授权转载!!!

 

虎menh泰nlgf克ycvf新t闻qvdpq网qyqcj版权所有,请勿未授权转载!!!

自己试一下就知道两者的不同了。

虎nn泰ut克fl新rjx闻_rx网hz版权所有,请勿未授权转载!!!

 

虎q泰xr克kk新injk闻a_网q版权所有,请勿未授权转载!!!

a.php

虎tg泰c_c克ucz新btm闻lbqxo网qlfn版权所有,请勿未授权转载!!!

class a{

虎vi泰g克h新vw闻wwntr网kqcqo版权所有,请勿未授权转载!!!

    function __construct(){

虎k泰le克r新uzhvs闻wkyg网opm版权所有,请勿未授权转载!!!

        echo 'a';

虎xtxzx泰jgsw克c新cnuz闻sgy网wmbb版权所有,请勿未授权转载!!!

    }

虎tadaz泰xh克f新ymfd闻_ygb网ka版权所有,请勿未授权转载!!!

}

虎zd泰k克tg新arene闻bkh网w版权所有,请勿未授权转载!!!

b.php(注意:这里构造函数没有调用parent::__construct();)

虎ivcq泰g_j克zp新oqhg闻rm网eht版权所有,请勿未授权转载!!!

include 'a.php';

虎ssfu泰of_t克yh新zirgx闻mbyg网ypogf版权所有,请勿未授权转载!!!

class b extends a{

虎dnl泰nlpon克ril新brx闻gnle网_zfny版权所有,请勿未授权转载!!!

    function __construct(){

虎ncvid泰gdog克omha新vj闻ihg_r网tpwbj版权所有,请勿未授权转载!!!

        echo 'b';

虎pv泰zwh克mg新eame闻qrfls网yneh版权所有,请勿未授权转载!!!

    }

虎punnk泰ak克mixe新u闻ppm网ttuaj版权所有,请勿未授权转载!!!

}

虎apx泰aye克ox新yngdx闻ctklp网bndtw版权所有,请勿未授权转载!!!

 

虎vt泰v克phvd新j闻ao网_jp版权所有,请勿未授权转载!!!

$test=new b();

虎k泰vrsjd克oy_qe新kwkfv闻_ne网chtt版权所有,请勿未授权转载!!!

运行结果:

虎q泰derp克qghuz新eeas闻bdp网kg版权所有,请勿未授权转载!!!

b

虎ah泰blkgq克m新fzv闻b_xk网su版权所有,请勿未授权转载!!!


虎kti泰ku克vq新tiq闻nk网m版权所有,请勿未授权转载!!!

可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。

虎v泰volj克_bd新nx闻pwhra网cg版权所有,请勿未授权转载!!!

 

虎f泰zwfv克c新jexu闻gfn网iev版权所有,请勿未授权转载!!!

如果b.php的构造函数加上parent::__construct(),就不同了。

虎gxe泰i_pmo克eeizl新t闻whj网z_版权所有,请勿未授权转载!!!

include 'a.php';

虎_jy泰o克pj新z闻mlw网dxun版权所有,请勿未授权转载!!!

class b extends a{

虎fjtzf泰i克fygqq新n_g闻igjrr网k版权所有,请勿未授权转载!!!

    function __construct(){

虎bsdr泰c克u_x新oqx闻tj_sz网cyq版权所有,请勿未授权转载!!!

        parent::__construct();

虎guyni泰xjyb克tb新rrdd闻opskh网y版权所有,请勿未授权转载!!!

        echo 'b';

虎voq泰dk克i新lm闻cmw网t版权所有,请勿未授权转载!!!

    }

虎nlmt泰trzmk克nfcy新h闻a网m版权所有,请勿未授权转载!!!

}

虎dnzu_泰cdtam克f新kvr闻qm网nn版权所有,请勿未授权转载!!!

 

虎y泰h克otdyg新nqly闻fw网j_z_版权所有,请勿未授权转载!!!

$test=new b();

虎hbbam泰pktf克krm新i闻b网buux版权所有,请勿未授权转载!!!

那么输出结果是:

虎qa泰mkmzq克dvl新cq闻i网_s版权所有,请勿未授权转载!!!

ab

虎h泰ga克ccmt新z闻t网ckv版权所有,请勿未授权转载!!!


虎hf泰s克p_e新imn闻gcgvf网s版权所有,请勿未授权转载!!!

此时才执行了父类的构造函数。

虎yfn泰e克dys新zan闻w网njzns版权所有,请勿未授权转载!!!

 

虎temc泰op克ll新aqfp闻u网y版权所有,请勿未授权转载!!!

我们再来看看thinkphp的_initialize()函数。

虎v泰vei克vxbt新sv_闻_网k_q版权所有,请勿未授权转载!!!

 

虎odka泰ypb克c_j新wwttg闻bf_ii网eto版权所有,请勿未授权转载!!!

BaseAction.class.php

虎hoyzx泰t克ek新j闻_网pyl版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎zt泰tz_克jdn新r闻g网ebdl版权所有,请勿未授权转载!!!

    public function _initialize(){

虎_泰epj_o克c新ags闻sy网w版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎izd泰ojbrz克c新bhpd闻urh网e版权所有,请勿未授权转载!!!

    }

虎tksw泰jrik克dwwtr新p闻dww网vhjhg版权所有,请勿未授权转载!!!

}

虎kuzy泰pl克zvem新q_ig闻ycv网tw版权所有,请勿未授权转载!!!


虎z泰qs克cokt新wwqs闻uroz网ds版权所有,请勿未授权转载!!!

IndexAction.class.php

虎tpy_泰cu_vx克icqr新rpc闻xr网bhrbj版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎crdo泰fvi克i新o闻n网u版权所有,请勿未授权转载!!!

    public function (){

虎kb泰h克zd新cwmoz闻lymwg网al版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎qm泰u克qqz新elh闻v网wsxfp版权所有,请勿未授权转载!!!

    }

虎wks泰_tasq克u新jfg闻lbghf网k版权所有,请勿未授权转载!!!

}

虎z_ew泰wz_克y新na闻tm网iyqk版权所有,请勿未授权转载!!!


虎dnt泰brcc克c新r_闻w网lqcls版权所有,请勿未授权转载!!!

运行Index下的index方法,输出结果:

虎k泰ww克q新qnq闻jvul网h版权所有,请勿未授权转载!!!

baseActionindexAcition

虎sqbx泰us克xq新nq闻w网kp版权所有,请勿未授权转载!!!


虎sqkgz泰k克s新am闻kl网fxe版权所有,请勿未授权转载!!!

可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();

虎fybwp泰rkof克lux新cbv闻u网att版权所有,请勿未授权转载!!!

 

虎bauot泰ulpmw克jpksv新ksoc闻b_mtw网opro版权所有,请勿未授权转载!!!

这就是ThinkPHP中_initialize()和__construct()的不同。

虎hbqxo泰idlva克i_ap新b闻ykfq网wve版权所有,请勿未授权转载!!!




من أجل نقل المزيد من المعلومات و تيسير المناقشة ، لا يعني أن الموقع و منظم و المقاول يوافق على وجهة نظره أو يؤكد أصالة محتوياته ، هذه المادة هي للإشارة فقط ، إذا كان انتهاك حقوق المؤلف الأصلي ، يرجى الاتصال بمسؤول الموقع

تسجيل الدخول لتعليق

قائمة التعليقات

    بيانات مؤقتة