ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 5740
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎rfxq泰nkfu克xudg新j闻v网y版权所有,请勿未授权转载!!!
虎k泰cian克tlc_e新ah闻puqbl网a版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎y泰r克os新dbash闻rwcik网mvlp版权所有,请勿未授权转载!!!
虎bphqu泰jx克uyl_f新ens闻a_su网kmqq版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎rteo泰y克g新b闻n网kcgn版权所有,请勿未授权转载!!!
虎xsaz泰bbvih克h新ud闻cel网ebtac版权所有,请勿未授权转载!!!
a.php
虎j_泰u_克su新jjk闻fxdhf网pwtua版权所有,请勿未授权转载!!!
class a{
虎ci泰mcfhq克r新uvbae闻apibp网f版权所有,请勿未授权转载!!!
function __construct(){
虎_hbv泰d克cy新nbs闻dcnm网k_p版权所有,请勿未授权转载!!!
echo 'a';
虎ns泰bx克z新w闻qvvaz网rp_版权所有,请勿未授权转载!!!
}
虎l泰ivo克nqjbw新h闻n网pb版权所有,请勿未授权转载!!!
}
虎w泰hc克cucrv新xexbi闻tz网lmhsu版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎r泰tacxi克zmge新k闻rdq网jd版权所有,请勿未授权转载!!!
include 'a.php';
虎wlaqi泰xht克cnm新flv闻vzp网he_ve版权所有,请勿未授权转载!!!
class b extends a{
虎dzu泰iu克ipzcj新zw闻sux网qbfe版权所有,请勿未授权转载!!!
function __construct(){
虎fxtpg泰ltv克pu新epmqb闻hmh网e版权所有,请勿未授权转载!!!
echo 'b';
虎pewcy泰d克bb新nbvv闻xjf网elt版权所有,请勿未授权转载!!!
}
虎x_z泰qlb克t新xs闻dzqb网yb版权所有,请勿未授权转载!!!
}
虎ljnq泰lre克bij新dvun_闻tl网tyeaq版权所有,请勿未授权转载!!!
虎abc_b泰wrw克lwcw新fhm闻hxggn网rlwm版权所有,请勿未授权转载!!!
$test=new b();
虎mfvc泰ynlgp克qyq_新dyj闻xi网nq_xi版权所有,请勿未授权转载!!!
运行结果:
虎dx_uu泰wabx克zfng新l闻_网jtok版权所有,请勿未授权转载!!!
b
虎cah泰c克wla新vuo闻taby网ocyud版权所有,请勿未授权转载!!!
虎ro泰refg克n新khoi闻a网opg版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎nzosh泰iki克m_hjc新gcx闻wxr网rzvw版权所有,请勿未授权转载!!!
虎quxd泰ys克f新vaj闻kx网iklc版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎zoclp泰fdef克dumy新vqmpi闻cj网cijg版权所有,请勿未授权转载!!!
include 'a.php';
虎q泰fldxe克_tw新li闻kj_vl网k版权所有,请勿未授权转载!!!
class b extends a{
虎h泰i_q克vo新fopph闻grrn网ji版权所有,请勿未授权转载!!!
function __construct(){
虎j泰z克stlf新ead闻ilixg网tf版权所有,请勿未授权转载!!!
parent::__construct();
虎uwp泰erc克kvas新h闻r_网yia版权所有,请勿未授权转载!!!
echo 'b';
虎b泰rcurw克sk新oue_闻j网o版权所有,请勿未授权转载!!!
}
虎_泰hjb克nea新prpzp闻ajn网t版权所有,请勿未授权转载!!!
}
虎rek泰molsf克fx新nfvn闻ku网mzz版权所有,请勿未授权转载!!!
虎tcgxe泰ad克frsj新tk闻bono网k版权所有,请勿未授权转载!!!
$test=new b();
虎w泰e克utzsp新yw闻hi网xmz版权所有,请勿未授权转载!!!
那么输出结果是:
虎oy泰ybadp克dxdf新vvcvg闻t网asiw版权所有,请勿未授权转载!!!
ab
虎suv泰sl_克ew_nb新ntb闻p网i版权所有,请勿未授权转载!!!
虎c泰ey克f新gw闻bo网tpeng版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎og泰foonm克rzwgu新w闻t_we网uix版权所有,请勿未授权转载!!!
虎lailk泰b克aubp新pft闻bwbwx网bi版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎ha_gd泰fwonb克x_yq新dxy闻hyzma网q版权所有,请勿未授权转载!!!
虎oia泰vdve克ss新cs闻gty网jbyd_版权所有,请勿未授权转载!!!
BaseAction.class.php
虎n泰nqv克gyg新s闻spcgo网we_jm版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎ogma泰kn克ok新u闻h网mamhl版权所有,请勿未授权转载!!!
public function _initialize(){
虎nz泰irtq克z新pkr闻vcbaw网s版权所有,请勿未授权转载!!!
echo 'baseAction';
虎dpfz泰rnlb克w_k新i闻xqf网o版权所有,请勿未授权转载!!!
}
虎mspb泰sj克ijm新jxcz闻hmjck网sgov版权所有,请勿未授权转载!!!
}
虎xx泰zads克vvusr新_l闻mcqqk网p版权所有,请勿未授权转载!!!
虎io泰rzpq克cvb新jncle闻gq_jw网cmo版权所有,请勿未授权转载!!!
IndexAction.class.php
虎c泰z克z新ywp闻wmsw网mds版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎bhvm泰y克jbkhb新udbtt闻msf网rn版权所有,请勿未授权转载!!!
public function (){
虎wys泰rjy克s新p闻lx网pb版权所有,请勿未授权转载!!!
echo 'indexAction';
虎qmdz泰kss克eoks新_ojva闻kxl网pdq版权所有,请勿未授权转载!!!
}
虎hnc泰ql克yff新v闻o网_koi版权所有,请勿未授权转载!!!
}
虎_b泰d克hdz新x闻pye网uv_ik版权所有,请勿未授权转载!!!
虎tw泰qp克cqi新mopiz闻bysr网nr版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎aaab泰f克_n_nq新if闻bduf网rdoex版权所有,请勿未授权转载!!!
baseActionindexAcition
虎jry泰cyz克eljp新toin闻eq网gl版权所有,请勿未授权转载!!!
虎jcxhk泰hnhj克u新z闻g_k网e版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎yt泰b克td新f闻ew网ufpd版权所有,请勿未授权转载!!!
虎w泰b克pc新eorj闻jh网hk版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎uj泰h克f_新wgdlx闻bnoqm网p版权所有,请勿未授权转载!!!
Δήλωση: όλα τα άρθρα / τα σχέδια που αναδημοσιεύονται στον δικτυακό τόπο έχουν ως σκοπό τη διαβίβαση περισσότερων πληροφοριών και τη διευκόλυνση της συζήτησης, πράγμα που δεν σημαίνει ότι ο δικτυακός τόπος, ο οικοδεσπότης και ο διοργανωτής συμφωνούν με τις απόψεις τους ή επιβεβαιώνουν τη γνησιότητα του περιεχομένου τους. Τα περιεχόμενα των άρθρων είναι μόνο για αναφορά. Εάν παραβιαστούν τα δικαιώματα του αρχικού συγγραφέα, επικοινωνήστε με τον διαχειριστή του δικτυακού τόπου.
Λίστα σχολίων
-
Δεν υπάρχουν δεδομένα