虎泰克博客

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


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版权所有,请勿未授权转载!!!




Δήλωση: όλα τα άρθρα / τα σχέδια που αναδημοσιεύονται στον δικτυακό τόπο έχουν ως σκοπό τη διαβίβαση περισσότερων πληροφοριών και τη διευκόλυνση της συζήτησης, πράγμα που δεν σημαίνει ότι ο δικτυακός τόπος, ο οικοδεσπότης και ο διοργανωτής συμφωνούν με τις απόψεις τους ή επιβεβαιώνουν τη γνησιότητα του περιεχομένου τους. Τα περιεχόμενα των άρθρων είναι μόνο για αναφορά. Εάν παραβιαστούν τα δικαιώματα του αρχικού συγγραφέα, επικοινωνήστε με τον διαχειριστή του δικτυακού τόπου.

Υπόγραψε στο σχόλιο

Λίστα σχολίων

    Δεν υπάρχουν δεδομένα