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操作文件方法问答
Mar 16 PHP
php,ajax实现分页
Mar 27 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
php将字符串转换为数组实例讲解
May 05 PHP
PHP+MySql实现一个简单的留言板
Jul 19 PHP
WordPress伪静态规则设置代码实例
Dec 10 PHP
PHP7 弃用功能
Mar 09 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调用数据库的存贮过程!
2006/10/09 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
JS中的BOM应用
2018/02/02 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python发送邮件实现基础解析
2020/08/14 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
优秀党支部事迹材料
2014/01/14 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
关于安全的演讲稿
2014/05/09 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript