1.构造函数实例化类的时候会自动调用,

2.子类没有构造函数,会直接调用父类的构造涵数, 继承父类的属性和方法

3.子类和父类都有构造函数,实例子类时不会自动调用父类构造函数,只会调用子类自己的构造函数。

用 parent::__construct();可以调用父类的构造函数。

ThinkPHP中的__initialize()和类的构造函数__construct()

网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下。将结果和大家分享。不对请更正。

首先,我要说的是

1、__initialize()不是php类中的函数,php类的构造函数只有__construct().

2、类的初始化:子类如果有自己的构造函数(__construct()),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化。

3、当子类和父类都有__construct()函数的时候,如果要在初始化子类的时候同时调用父类的__constrcut(),则可以在子类中使用parent::__construct().

如果我们写两个类,如下

classAction{

publicfunction__construct()

{

echo 'hello Action';

}

}

classIndexActionextendsAction{

publicfunction__construct()

{

echo 'hello IndexAction';

}

}

$test =newIndexAction;

//output --- hello IndexAction

很明显初始化子类IndexAction的时候会调用自己的构造器,所以输出是'hello IndexAction'。

但是将子类修改为

classIndexActionextendsAction{

publicfunction__initialize()

{

echo 'hello IndexAction';

}

}

那么输出的是'hello Action'。因为子类IndexAction没有自己的构造器。

如果我想在初始化子类的时候,同时调用父类的构造器呢?

classIndexActionextendsAction{

publicfunction__construct()

{

parent::__construct();

echo 'hello IndexAction';

}

}

这样就可以将两句话同时输出。

当然还有一种办法就是在父类中调用子类的方法。

classAction{

publicfunction__construct()

{

if(method_exists($this,'hello'))

{

$this ->hello();

}

echo 'hello Action';

}

}

classIndexActionextendsAction{

publicfunctionhello()

{

echo 'hello IndexAction';

}

}

这样也可以将两句话同时输出。

而,这里子类中的方法hello()就类似于ThinkPHP中__initialize()。

所以,ThinkPHP中的__initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct(),同时正确的调用框架内父类的构造器,所以,我们在ThnikPHP中初始化子类的时候要用__initialize(),而不用__construct(),当然你也可以通过修改框架将__initialize()函数修改为你喜欢的函数名。

1.然后去继承的父类里面一看,原来里面写了一个_initialize()的方法,原来是子类的构造函数覆盖了父类的,所以报错了,所以需要继承一下父类的构造函数:

parent::__construct();

其实_initialize()是TP封装的方法,和php自带的__construct()方法是差不多一样的,不过有一点区别,那就是_initialize() 它会帮我们自己继承父类的构造函数,而__construct()源生自带的,需要自己去继承父类构造函数

转:http://www.thinkphp.cn/code/367.html

转 :https://blog.csdn.net/jacko_chan/article/details/54406178

php的封装construct构造方法,__construct() 构造函数相关推荐

  1. php construct 返回值,PHP 构造方法 __construct()

    PHP 构造方法 __construct() PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法. 构造方法 构造方法是类中的一个特殊方法.当使用 new 操作符创建一 ...

  2. php 静态类的 construct,PHP 类的构造方法 __construct()

    1. 构造方法简介 构造方法 __construct() 是一种类结构特有的特殊方法,该方法由系统规定好 实例化一个类时:先调用该方法,再返回类的对象 构造方法也是普通方法,不同之处就是在实例化类时会 ...

  3. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...

  4. 杨校老师课堂之Java类与对象、封装、构造方法

    杨校老师课堂之Java类与对象.封装.构造方法 本篇文章内容如下: 面向对象 类与对象 三大特征--封装 构造方法 教学目标 能够理解面向对象的思想 能够明确类与对象关系 能够掌握类的定义格式 能够掌 ...

  5. Java07-day07【类和对象、对象内存图、成员变量与局部变量、private、this、封装、构造方法】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] &qu ...

  6. java 类与对象、封装、构造方法

    java 类与对象.封装.构造方法 面向对象 类与对象 三大特征--封装 构造方法 第1章 面向对象思想 1.1 面向对象思想概述 概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种 ...

  7. php的construct,PHP构造方法__construct的简介

    php中构造方法是对象创建完成后第一个被对象自动调用的方法.在每个类中都有一个构造方法,如果没有明显地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方法. ​构造方法的作用 通常构造方法被用 ...

  8. 基础01类与对象、封装、构造方法

    面向对象思想: 面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节. 面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿 ...

  9. 面向对象--封装、构造方法

    面向对象 对象与类 每个对象具有三个特点:对象的状态,对象的行为和对象的标识. 对象的状态用来描述对象的基本特征.对象的行为用来描述对象的功能.对象的标识是指对象在内存中都有一个唯一的地址值用来和其他 ...

最新文章

  1. 代码大全读后感(二)
  2. [ Luogu 4626 ] 一道水题 II
  3. 为什么多对多关系需要建立中间表_中间表是什么?和报表有什么关系?会带来怎样的问题?又如何解决?...
  4. java system.out.read_求教Java高手,关于输入流的read的问题,为什么while循环体里面的两个System.out.println没有打印出来?...
  5. PostgreSQL DISTINCT用法
  6. 数据结构实验之图论四:迷宫探索_用图机器学习探索 A 股个股相关性变化
  7. python实现异步的几种方式_终于搞明白了,异步Python比同步Python究竟快在哪里?...
  8. JZOJ 3490. 旅游(travel)
  9. fpga运算服务器_SparseArray替代HashMap来提高性能
  10. JavaScript教程---洪恩在线
  11. vs中怎么去链接一个库文件(ws2_32.lib)
  12. 台式计算机usb口不识别鼠标,电脑USB接口不能识别鼠标键盘怎么办
  13. 【原创TVT技术解析】“双击Q盘”“Q盘红色图标消失”问题
  14. BIOS实战之Super IO-Smart Fan
  15. cadence SPB17.4 - allegro - Artwork will be rounded down
  16. Redmi K20 安卓9跨版本刷第三方ROM
  17. Android IBinder机制简单介绍
  18. 【视频分享】尚硅谷Java视频教程_Jenkins视频教程
  19. 有会用正则表达式解这个吗?
  20. 美通企业日报 | 爱茉莉太平洋与阿里巴巴达成战略合作;新富人群房地产投资比重提升...

热门文章

  1. python怎么安装pymysql_python安装PyMySQL
  2. SpringBoot过滤器获取POST请求的JSON参数
  3. oracle主键自增(序列)
  4. 如何提升深度学习的表现?
  5. 人工智能基础:迁移学习对抗学习简述
  6. el-table修改表头颜色和表格内容背景色
  7. android DrawerLayout 点击穿透、点击自身消失等问题解决
  8. python线性插值函数_Numpy一维线性插值函数的用法
  9. C/C++-----对C语言文件的学习
  10. 深入理解ReLU、Leaky ReLU、 PReLU、ELU、Softplus