ThinkPHP中__initialize()和类的构造函数__construct()用法分析
作者:shichen2014 发布时间:2023-07-08 01:26:24
本文实例分析了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框架程序设计有所帮助。
猜你喜欢
- 一、Browser Capabilities组件 该组件最主要的作用是:提取识别客户端浏览器的版本信息。其原理是这样的:当客户端浏览器向服务
- 问: 如果数据表中有时间字段,现在要迁移到其他时区的服务器上,该如何处理呢?答:在高版本的mysqldump中,新增了一个选项:--tz-u
- 以前没见过这个效果,滚动纵向滚动条看看效果就明白了这样的效果,广告商应该比较喜欢。<!DOCTYPE html PUBLIC &quo
- <% Rem Rem ## 在线升级类声明 Class Cls_oUpdate
- 自从2005年8月11日阿里巴巴宣布收购雅虎中国的全部资产后,做为阿里巴巴集团的创始人马云心里盘算的事应该是如何把雅虎中虎整合进阿里巴巴这个
- 所谓“评论”不是必须得有文本框,用户录入提交数据才算,广义上的评论包括用户的任何“表态”,典型如打分。我接触电子商务时间并不长,最早应该是0
- 我认为在ASP中最好的办法是用编程实现定时刷新Cache,也就是说给Application中储存的设一个过期时间。当然,在ASP中Appli
- 代码如下:Class XMLClass Private objXml Private xmlDoc Private xmlPath '
- 第二次遇到FF下正则兼容性问题( 第一次是关于"g"全局标志的,现在网上已有很多相关文章介绍)。以下正则在FF和IE下的
- 这是一个很简单的纯CSS相册滑动浏览效果,仅用一个无序列表ul结合简单的CSS就可以实现。原文中介绍的纵向滑动相册的实现方法,但是相比之下个
- 呵呵,我之前也写过一个类似的模板替换功能.>> 已实现:>、<、>=、<=、=、==等简单的运算>
- 任何一个交互过程的操作,对于用户来说都有学习成本,谁也不能保证所有人都可以准确无误地走完一个流程。交互设计师在设计时应该考虑适时地给用户相应
- 等啊等,约会都回来了,终于等到了Google放出今年的情人节Logo,原本下午四点就可以上线的这篇文章,为了等待Google谷歌美国总部的那
- Module Tabs(也称选项卡,后文中简称Tab,以便更符合中国设计师的日常叫法) 是一个常见的交互元素——将不同的内容重叠放置在某一布
- 适配竖屏横向尺度,禁止出现横向滚屏常规QVGA机型竖屏状态下,14号字体,单行仅显示13.5个字。资讯频道的新闻短标题要控制在13字以内才能
- 好多网友问起来,·深度学习网址导航·深度学习整站系统 的后台管理能否增加批量删除功能,如何加:就是列出N篇文章或网址信息,每篇文章或网址前有
- 今天在看框架的时候无意间看到了document.compatMode,经过一番资料查找,终于搞懂了。文档模式在开发中貌似很少用到,最常见的是
- 在ASP中,除了ADODB、Scripting 等一些常用组件外,我们还可以用微软的ActiveX方法来轻松捕获哟: <%u
- 在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表
- 表的故障检测和修正的一般过程如下:◆ 检查出错的表。如果该表检查通过,则完成任务,否则必须修复出错的数据库表。◆ 在开始修复之前对表文件进行