浅谈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 相关文章推荐
初品cakephp 入门基础
Feb 16 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
Oct 22 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP中localeconv()函数的用法
Mar 26 PHP
PHP预定义接口――Iterator用法示例
Jun 05 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下连接mssql2005的代码
2011/01/17 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
js分页代码分享
2014/04/28 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
python根据路径导入模块的方法
2014/09/30 Python
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
银行求职推荐信范文
2013/11/30 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
外国人来华邀请函
2015/01/31 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
详解Vue3使用axios的配置教程
2022/04/29 Vue.js