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数组的使用方法小结
Sep 23 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
php中的三元运算符使用说明
Jul 03 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 PHP
php与flash as3 socket通信传送文件实现代码
Aug 16 PHP
php如何实现只替换一次或N次
Oct 29 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
PHP简单遍历对象示例
Sep 28 PHP
ThinkPHP5框架实现简单的批量查询功能示例
Jun 07 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
JavaScript经典效果集锦
2010/07/06 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python线程池threadpool实现篇
2018/04/27 Python
python tkinter组件使用详解
2019/09/16 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
django-csrf使用和禁用方式
2020/03/13 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
大学在校生求职信范文
2013/11/21 职场文书
法制教育演讲稿
2014/09/10 职场文书
公司欠款证明
2015/06/24 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
执行力心得体会范文
2016/01/11 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python