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
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
php截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
PHP队列用法实例
Nov 05 PHP
php中session与cookie的比较
Jan 27 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 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
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
sublime text 3配置使用python操作方法
2017/06/11 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
C++的几个面试题附答案
2016/08/03 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
货代行业个人求职简历的自我评价
2013/10/22 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
中班教师个人总结
2015/02/05 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
民事答辩状格式范文
2015/05/21 职场文书
紫日观后感
2015/06/05 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
如何书写授权委托书?
2019/06/25 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS