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 相关文章推荐
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
PHP中的session安全吗?
Jan 22 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 PHP
PHP运行模式汇总
Nov 06 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 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
杏林同学录(七)
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
php基础知识:类与对象(5) static
2006/12/13 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
img的onload的另类用法
2008/01/10 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
python实现简易版计算器
2020/06/22 Python
python读取和保存视频文件
2018/04/16 Python
python3字符串操作总结
2019/07/24 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
python selenium xpath定位操作
2020/09/01 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
优秀大学生推荐信范文
2013/11/28 职场文书
安全生产先进个人材料
2014/02/06 职场文书
自行车广告词大全
2014/03/21 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
学校百日安全活动总结
2015/05/07 职场文书
联谊会开场白
2015/06/01 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python