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脚本中include文件出错解决方法
Nov 20 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP的PDO连接讲解
Jan 24 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 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中{}大括号是什么意思
2013/12/01 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
微信小程序实现首页弹出广告
2020/12/03 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python中使用PDB库调试程序
2015/04/05 Python
python实现中文转换url编码的方法
2016/06/14 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python中abs&map&reduce简介
2018/02/20 Python
python format 格式化输出方法
2018/07/16 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
护士求职推荐信范文
2013/11/23 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
创业计划书之养殖业
2019/10/11 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Python面向对象之成员相关知识总结
2021/06/24 Python