浅谈ThinkPHP中initialize和construct的区别


Posted in PHP onApril 01, 2017

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的不同。

以上这篇浅谈ThinkPHP中initialize和construct的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP的explode和implode的使用说明
Jul 17 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
php格式化金额函数分享
Feb 02 PHP
php中动态变量用法实例
Jun 10 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
PHP实现基于文本的摩斯电码生成器
Jan 11 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
PHP使用第三方即时获取物流动态实例详解
Apr 27 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
laravel框架如何设置公共头和公共尾
Oct 22 PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 #PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 #PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 #PHP
php file_get_contents取文件中数组元素的方法
Apr 01 #PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 #PHP
php获取ip及网址的简单方法(必看)
Apr 01 #PHP
Thinkphp事务操作实例(推荐)
Apr 01 #PHP
You might like
php.ini中文版
2006/10/09 PHP
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
PHP中16个高危函数整理
2019/09/19 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
Python入门之modf()方法的使用
2015/05/15 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
大学生专业个人学习的自我评价
2013/10/26 职场文书
高考励志标语
2014/06/05 职场文书
音乐幼师求职信
2014/07/09 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
入党团支部推荐意见
2015/06/02 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
使用python绘制分组对比柱状图
2022/04/21 Python