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程序--记数器
Oct 09 PHP
杏林同学录(五)
Oct 09 PHP
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php获取当月最后一天函数分享
Feb 02 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
May 23 PHP
PHP goto语句用法实例
Aug 06 PHP
laravel 解决Validator使用中出现的问题
Oct 25 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生成静态HTML文档的原理
2012/10/29 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jQuery中extend函数详解
2015/02/13 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python实现注册登录系统
2017/08/08 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
python中re模块知识点总结
2021/01/17 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
学生打架检讨书
2014/02/14 职场文书
《分一分》教学反思
2014/04/13 职场文书
金融与证券专业求职信
2014/06/22 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
病假条格式范文
2015/08/17 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python