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 相关文章推荐
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
解析php5配置使用pdo
Jul 03 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php限制文件下载速度的代码
Oct 20 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
js+xml生成级联下拉框代码
2012/07/24 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
Python socket模块方法实现详解
2019/11/05 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
python如何实时获取tcpdump输出
2020/09/16 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
2014信息公开实施方案
2014/02/22 职场文书
商务英语广告词大全
2014/03/18 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
妈妈别哭观后感
2015/06/08 职场文书
田径运动会广播稿
2015/08/19 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python
python实现简单的聊天小程序
2021/07/07 Python
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL