ThinkPHP中__initialize()和类的构造函数__construct()用法分析


Posted in PHP onNovember 29, 2014

本文实例分析了ThinkPHP中的__initialize()和类的构造函数__construct()。分享给大家供大家参考。具体分析如下:

thinkphp中的__construct是不可以随便用的,因为你的模块类继承上级类,上级类有定义好的;

1、__initialize()不是php类中的函数,php类的构造函数只有__construct().

2、类的初始化:子类如果有自己的构造函数(__construct()),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化。

3、当子类和父类都有__construct()函数的时候,如果要在初始化子类的时候同时调用父类的__constrcut(),则可以在子类中使用parent::__construct().

如果我们写两个类,如下:

class Action{  

    public function __construct()  

    {  

        echo 'hello Action';  

    }  

}  

class IndexAction extends Action{  

    public function __construct()  

    {  

        echo 'hello IndexAction';  

    }  

}  

$test = new IndexAction;  

//output --- hello IndexAction

很明显初始化子类IndexAction的时候会调用自己的构造器,所以输出是'hello IndexAction',但是将子类修改为:
class IndexAction extends Action{  

    public function __initialize()  

    {  

        echo 'hello IndexAction';  

    }  

}

那么输出的是'hello Action',因为子类IndexAction没有自己的构造器,如果我想在初始化子类的时候,同时调用父类的构造器呢?
class IndexAction extends Action{  

    public function __construct()  

    {  

        parent::__construct();  

        echo 'hello IndexAction';  

    }  

}

这样就可以将两句话同时输出,当然还有一种办法就是在父类中调用子类的方法.
class Action{  

    public function __construct()  

    {  

        if(method_exists($this,'hello'))  

        {  

            $this -> hello();  

        }  

        echo 'hello Action';  

    }  

}  

class IndexAction extends Action{  

    public function hello()  

    {  

        echo 'hello IndexAction';  

    }  

}

这样也可以将两句话同时输出,而这里子类中的方法hello()就类似于ThinkPHP中__initialize()。

所以,ThinkPHP中的__initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct(),同时正确的调用框架内父类的构造器,所以,我们在ThnikPHP中初始化子类的时候要用__initialize(),而不用__construct(),当然你也可以通过修改框架将__initialize()函数修改为你喜欢的函数名.

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
PHP 全角转半角实现代码
May 16 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 PHP
Sublime里直接运行PHP配置方法
Nov 28 #PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 #PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 #PHP
php的mssql数据库连接类实例
Nov 28 #PHP
smarty中post用法实例
Nov 28 #PHP
smarty简单入门实例
Nov 28 #PHP
php最简单的删除目录与文件实现方法
Nov 28 #PHP
You might like
php 中的4种标记风格介绍
2012/05/10 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
Express + Session 实现登录验证功能
2017/09/08 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Python判断变量是否已经定义的方法
2014/08/18 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
快速查找Python安装路径方法
2020/02/06 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
Python各种扩展名区别点整理
2020/02/27 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
高中军训感言800字
2014/03/05 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
九九重阳节致辞
2015/07/31 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
python常见的占位符总结及用法
2021/07/02 Python