构造函数construct和ThinkPHP中initialize不同的示例分析
admin
2023-06-24 02:21:20
0

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

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

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

a.php

class a{

    function __construct(){

        echo 'a';

    }

}

复制代码

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

include 'a.php';

class b extends a{

    function __construct(){

        echo 'b';

    }

}

$test=new b();

复制代码

运行结果:

b

复制代码

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

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

include 'a.php';

class b extends a{

    function __construct(){

        parent::__construct();

        echo 'b';

    }

}

$test=new b();

复制代码

那么输出结果是:

ab

复制代码

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

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

BaseAction.class.php

class BaseAction extends Action{

    public function _initialize(){

             echo 'baseAction';

    }

复制代码

IndexAction.class.php

class IndexAction extends BaseAction{

    public function (){

             echo 'indexAction';

        }

复制代码

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

baseActionindexAcition

复制代码

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

这就是ThinkPHP中initialize和construct的不同。

相关内容

热门资讯

5月30日、31日晚8点来京东... 又好又便宜的京东618将于5月30日晚8点正式开启,全品类现货开卖。5月30日、31日每晚8点,消费...
27国代表齐聚厦门!金砖国家新... 来源:中国制造 5月27日,由工业和信息化部、福建省人民政府共同主办2026金砖国家新工业革命伙伴...
奋进“十五五” 科技谱新篇 —... 2026年5月28日上午,由抚顺市科学技术协会、新抚区科技局、新抚区委宣传部、新抚区科学技术协会联合...
国家最新的“人口小普查”,揭开... 5月22日,国家统计局公布了2025年全国1%人口抽样调查主要数据。这是国家统计局于2025年开展的...
漯河创新“曲艺+短剧+漫画”模... 您的浏览器不支持 video 标签。防谣治谣,重在源头,贵在日常。漯河市委网信办打破传统说教,推出《...
凤凰晚报丨哈马斯加沙领导人,上... 今日人物【穆罕默德·奥达,“上任即被斩首”】奥达一直是哈马斯的活跃领导人,曾长期担任哈马斯核心战斗部...
国家知识产权局前局长田力普一行... 本报讯 (记者吴奕萱 见习记者王楠)5月29日,宁波均普智能制造股份有限公司(以下简称“均普智能”)...
向山、向海、向荒野|2026第... 2026第二届搜狐极限探索者大会,即将于6 月 6 日在北京盛大启幕。 这是一场属于探索者的年度盛宴...
巴斯勒相机维修BIP2-D13... 导语:在工业自动化设备运维中,工业相机作为视觉检测的核心部件,其稳定性直接影响产线效率。以巴斯勒BI...
电视光信号一直闪红灯怎么回事 电视光信号一直闪红灯怎么回事1、可能是因为宽带欠费所导致的。2、可能是因为所在的片区光纤在检修或者出...