浅谈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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
MySQL授权问题总结
May 06 PHP
js下函数般调用正则的方法附代码
Jun 22 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
PHP输出缓存ob系列函数详解
Mar 11 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
layui数据表格自定义每页条数limit设置
Oct 26 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
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
js 判断 enter 事件
2009/02/12 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
js实现鼠标跟随运动效果
2020/08/02 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
python导出hive数据表的schema实例代码
2018/01/22 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
我的未来不是梦演讲稿
2014/09/02 职场文书
2014年班主任工作总结
2014/11/08 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
2019秋季运动会口号
2019/06/25 职场文书