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从数组中随机抽取一些元素的代码
Nov 05 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
PHP编程风格规范分享
Jan 15 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
php生成rss类用法实例
Apr 14 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
实用函数2
2007/11/08 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python 和 JS 有哪些相同之处
2017/11/23 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
机械设计职业生涯规划书
2013/12/27 职场文书
保险经纪人求职信
2014/03/11 职场文书
《泉水》教学反思
2014/04/11 职场文书
工程承包协议书范本
2014/09/29 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
2016教师国培研修感言
2015/12/08 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android