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实现图片等比例放大和缩小的方法详解
Jun 06 PHP
PHP在不同页面间传递Json数据示例代码
Jun 08 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
php自定义加密与解密程序实例
Dec 31 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
PHP中list方法用法示例
Dec 01 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
php图片裁剪函数
Oct 31 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 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自动跳转中英文页面
2008/07/29 PHP
微信支付开发订单查询实例
2016/07/12 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
js实现表格数据搜索
2020/08/09 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
windows下ipython的安装与使用详解
2016/10/20 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Python发展简史 Python来历
2019/05/14 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
小学生班会演讲稿
2014/01/09 职场文书
教师产假请假条
2014/04/10 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL