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 相关文章推荐
追求程序速度,而不是编程的速度
Apr 23 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
PHP mcrypt可逆加密算法分析
Jul 19 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php中adodbzip类实例
Dec 08 PHP
php数组冒泡排序算法实例
May 06 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 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
IStream与TStream之间的相互转换
2008/08/01 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
python如何实现代码检查
2019/06/28 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
"引用"与指针的区别是什么
2016/09/07 面试题
软件工程专业推荐信
2013/10/28 职场文书
前台文员的岗位职责
2013/11/14 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
网管求职信
2014/03/03 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
2014年学习部工作总结
2014/11/12 职场文书
英文感谢信范文
2015/01/21 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript