浅谈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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
PHP程序员编程注意事项
Apr 10 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
PHP编码规范的深入探讨
Jun 06 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
抛弃 PHP 代价太高
Apr 26 PHP
php技巧小结【推荐】
Jan 19 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 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 编写的日历
2006/10/09 PHP
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
实验教师岗位职责
2014/02/13 职场文书
党员公开承诺事项
2014/03/25 职场文书
成绩单公证书
2014/04/10 职场文书
经济管理专业求职信
2014/06/09 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers