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 ADODB使用方法集锦
Mar 25 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
php中session退出登陆问题
Feb 27 PHP
php遍历文件夹和文件列表示例分享
Mar 11 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
PHP原生函数一定好吗?
Dec 08 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
laravel请求参数校验方法
Oct 10 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
php中pcntl_fork详解
Apr 01 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进程之间实现共享内存的方法
2014/06/13 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
python中如何设置代码自动提示
2020/07/15 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
酒吧总经理岗位职责
2013/12/10 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
市场安全管理制度
2014/01/26 职场文书
优秀大学生自荐信
2014/06/09 职场文书
给校长的一封检讨书
2014/09/20 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
八年级英语教学计划
2015/01/23 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书