虎泰克博客

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


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

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

虎nstu泰ela克vj新e闻prlfj网yn_版权所有,请勿未授权转载!!!

 

虎pwoc泰b克lw新pky闻vs网_版权所有,请勿未授权转载!!!

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

虎vu泰numu克if新ta_pw闻pjwvz网w版权所有,请勿未授权转载!!!

 

虎in泰rn克azht新bpm闻omvtw网qusi版权所有,请勿未授权转载!!!

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

虎bzv_v泰h克d新rkun闻kihf网yuq版权所有,请勿未授权转载!!!

 

虎dcyb泰y克kxkk新iuzun闻k网rub_q版权所有,请勿未授权转载!!!

a.php

虎wxbke泰_l克poon新u闻szdh网udpbl版权所有,请勿未授权转载!!!

class a{

虎u泰r克nqi新ld闻v网sj版权所有,请勿未授权转载!!!

    function __construct(){

虎_泰mg克_e新ubugy闻kk网egk版权所有,请勿未授权转载!!!

        echo 'a';

虎j泰jnhw_克zosp新elnt闻q网kfzv版权所有,请勿未授权转载!!!

    }

虎lpxt泰vypzu克rcq新ytyn闻etc网yby版权所有,请勿未授权转载!!!

}

虎n_fj泰p克tf新ooic闻izikz网rkabr版权所有,请勿未授权转载!!!

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

虎ceax泰sqmss克urbg新lqp闻glzv网li版权所有,请勿未授权转载!!!

include 'a.php';

虎vuuq泰vezv克k新kru闻z网tfzzn版权所有,请勿未授权转载!!!

class b extends a{

虎m泰lbpq克zkkxy新z闻lu网maq版权所有,请勿未授权转载!!!

    function __construct(){

虎nbkg泰jhk克_rxh新cuhx闻ly网nd版权所有,请勿未授权转载!!!

        echo 'b';

虎p泰f克fe新p闻buiou网qptq版权所有,请勿未授权转载!!!

    }

虎tn泰umpsj克jj新r闻ag网cu版权所有,请勿未授权转载!!!

}

虎xgnmd泰wlde克ofez新fxzm闻egwd网pgzem版权所有,请勿未授权转载!!!

 

虎cctr泰xjrvf克juh新cbxo闻fxbqu网fa版权所有,请勿未授权转载!!!

$test=new b();

虎f泰uarvt克lsjj新rgua闻_网qe_版权所有,请勿未授权转载!!!

运行结果:

虎yzxm泰m克m新pyw闻kojmk网g版权所有,请勿未授权转载!!!

b

虎hdymv泰oxu_z克je新a闻_uofb网c版权所有,请勿未授权转载!!!


虎wj泰xqhoj克nxr新exp闻ev网zous版权所有,请勿未授权转载!!!

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

虎d泰j克gadt_新cpqsz闻xigk网rpfeg版权所有,请勿未授权转载!!!

 

虎p泰tbkh克p新otcf闻d网ukcbn版权所有,请勿未授权转载!!!

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

虎n泰lu克lz新igxq闻iugy网gnrta版权所有,请勿未授权转载!!!

include 'a.php';

虎fnmzv泰vxt克syyqd新ppxu闻qep网d版权所有,请勿未授权转载!!!

class b extends a{

虎gp泰y克qq新qgxl闻sdz网lo_lg版权所有,请勿未授权转载!!!

    function __construct(){

虎ryg泰a克ln新j闻w网grjp版权所有,请勿未授权转载!!!

        parent::__construct();

虎cbmj泰wh克cpyze新yq闻bjz网azlo版权所有,请勿未授权转载!!!

        echo 'b';

虎lcj泰tcfqm克q新j闻ivoln网vmh版权所有,请勿未授权转载!!!

    }

虎ydcwd泰pk_x克lfbc新m闻ej网g版权所有,请勿未授权转载!!!

}

虎rh泰guqu克omlr新a闻muv网y_mt版权所有,请勿未授权转载!!!

 

虎bhq_泰xre克cyqwy新nurza闻iaabp网ludje版权所有,请勿未授权转载!!!

$test=new b();

虎oa_泰g克_新yeqyg闻wexj网tdgj版权所有,请勿未授权转载!!!

那么输出结果是:

虎z泰imsa克nn新sc闻dgdus网lphq版权所有,请勿未授权转载!!!

ab

虎uicy泰dbe克xfx新hcb闻lu网b版权所有,请勿未授权转载!!!


虎t泰n克l新rch闻s_re网yqex版权所有,请勿未授权转载!!!

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

虎sl泰j克zrhgq新xi闻x_x网jqlcf版权所有,请勿未授权转载!!!

 

虎eacn泰chkan克cg新fob闻eeihr网kor版权所有,请勿未授权转载!!!

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

虎t_泰taobu克f新ufjbv闻bl网i版权所有,请勿未授权转载!!!

 

虎mnm泰v克p新w闻j网zq版权所有,请勿未授权转载!!!

BaseAction.class.php

虎glc泰j克a_新vrxzr闻tn网yqf版权所有,请勿未授权转载!!!

class BaseAction extends Action{

虎husk泰z克aeta新wkeuu闻vv_x网ntdti版权所有,请勿未授权转载!!!

    public function _initialize(){

虎xw泰zn克bw新_zfe闻v网gyn版权所有,请勿未授权转载!!!

             echo 'baseAction';

虎d_pzt泰ch克lnmd新ht闻nqvbz网fm_版权所有,请勿未授权转载!!!

    }

虎qq泰yazrb克pvb新o闻mnodk网rscw版权所有,请勿未授权转载!!!

}

虎gn泰cdgn克jclka新fqyz闻jo网ogpk版权所有,请勿未授权转载!!!


虎bpetr泰t克wau新mp闻m网w版权所有,请勿未授权转载!!!

IndexAction.class.php

虎tvrf泰ujf克dik新xrqj闻k网kqmyv版权所有,请勿未授权转载!!!

class IndexAction extends BaseAction{

虎v_r泰wtkb克r_新dkwzb闻jk网no版权所有,请勿未授权转载!!!

    public function (){

虎gj泰e_efl克gywsy新eu闻pu网btaux版权所有,请勿未授权转载!!!

             echo 'indexAction';

虎mmyvj泰selo克tbdn新te闻ufo网ve版权所有,请勿未授权转载!!!

    }

虎afrhb泰qxcsf克v新jic闻nh网mine版权所有,请勿未授权转载!!!

}

虎q泰psv克yxps新gso闻nw网ixors版权所有,请勿未授权转载!!!


虎q泰e克h新p闻z_wh网brwef版权所有,请勿未授权转载!!!

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

虎jumt泰lqfrq克b新jhkc闻lsukf网i版权所有,请勿未授权转载!!!

baseActionindexAcition

虎_xh泰cy克mlku新apqyy闻jt网ucg__版权所有,请勿未授权转载!!!


虎cjo_c泰cvki克tkjf新d闻x网efy_l版权所有,请勿未授权转载!!!

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

虎zoxj泰etcp克r_v新vmun闻hscc网ccm版权所有,请勿未授权转载!!!

 

虎a泰jdwr克cm新ea闻or网ec版权所有,请勿未授权转载!!!

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

虎u泰_vwa克vn新xeejg闻lcq网mavu版权所有,请勿未授权转载!!!




Bản phát biểu: tất cả các bản vẽ được in trên trang web là để truyền thêm thông tin và dễ dàng thảo luận, không có nghĩa là website, máy chủ và người cầm đầu đồng ý ý kiến của họ hoặc xác nhận tính xác thực của nội dung của họ. Nội dung các bài báo chỉ có liên quan. Nếu quyền của tác giả gốc bị vi phạm, xin liên lạc với quản trị website.

Ký vào để ghi chú

Ghi chú

    Không có dữ liệu