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 相关文章推荐
拼音码表的生成
Oct 09 PHP
坏狼的PHP学习教程之第2天
Jun 15 PHP
第二章 PHP入门基础之php代码写法
Dec 30 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 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的curl开启问题探讨
2014/04/08 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
PHP递归算法的简单实例
2019/02/28 PHP
在父页面调用子页面的JS方法
2013/09/29 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
python3.4实现邮件发送功能
2018/05/28 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Python连接Redis的基本配置方法
2018/09/13 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
python中删除某个元素的方法解析
2019/11/05 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
销售2014年度工作总结
2014/12/08 职场文书
电影雷锋观后感
2015/06/10 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers