子类和父类构造函数的继承与覆盖问题
来源:互联网 发布:淘宝神笔怎么保存模板 编辑:程序博客网 时间:2024/04/28 07:01
PHP 4.x 的构造函数名与类名相同。
子类的构造函数名与子类名相同(废话)。
在子类里父类的构造函数不会自动执行。
要在子类里执行父类的构造函数,必须执行类似以下语句:
$this->[父类的构造函数名()]
例如:
class base1
{
function base1()
{
echo 'this is base1 construct';
}
}
class class1 extends base1
{
function class1()
{
$this->base1();
echo 'this is class1 construct';
}
}
$c1 = new class1;
PHP5.x 版本:
PHP5.0 以上版本对类的功能进行了很大的扩充。类的构造函数统一命名为__construct()。
子类的构造函数名也是__construct()(也是废话)。
在子类里父类的构造函数会不会执行,分两种情况:
1,如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
2,如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:
parent::__construct();
例如:
class base2
{
function __construct()
{
echo 'this is base2 construct';
}
function __destruct()
{
}
}
class class2 extends base2
{
function __construct()
{
parent::__construct();
echo 'this is class2 construct';
}
}
注意 parent::__construct(); 语句不一定必须放在子类的构造函数中。放在子类的构造函数中仅仅保证了其在子类被实例化时自动执行。
PHP4.0 和 5.0 类构造函数的兼容问题:
在 PHP5.0 以上版本里,还兼容了 4.0 版本的构造函数的定义规则。如果同时定义了4.0的构造函数和 __construct()函数,则__construct() 函数优先。
- 子类和父类构造函数的继承与覆盖问题
- A 子类继承父类,子类的构造函数会覆盖父类的构造函数
- 继承(子类与父类构造函数的关系)
- Java子类和父类的构造函数继承的问题分析
- 关于PHP中构造函数以及子类继承父类构造函数的相关问题
- c++子类继承父类的覆盖问题
- 继承 子类对父类方法的覆盖 构造方法的继承 super
- 继承中,父类与子类都有静态代码块和构造函数的时执行顺序
- C++类继承:子类调用父类的构造函数
- 子类继承父类的构造函数(方法)吗?
- 子类继承父类的构造函数(方法)吗?
- 关于子类继承父类的构造函数用法
- 子类继承父类,构造函数的特点 super()
- JAVA 子类不能继承父类的构造函数
- 继承-父类子类构造函数的运行顺序
- 子类和父类的构造函数
- python中单继承和多继承中子类默认继承父类的哪个构造函数__init__
- 关于Scala子类继承父类属性的问题释疑---子类构造器参数不要与父类属性同名
- linux内核链表分析
- 【树DP+背包】求树的最小点覆盖的点个数
- python学习笔记16:tuple, set, dictionary
- HDU-3911Black and White
- UVA - 10245 The Closest Pair Problem
- 子类和父类构造函数的继承与覆盖问题
- iOS:事件处理机制(一)--Gesture Recognizers(待续)
- 写一个教训
- Qt 改变图片亮度算法
- 杭电OJ(HDOJ)1018题:求n的阶乘位数(数学公式)
- VS2010中MSCOMM 串口通信控件的注册使用
- 局部变量和全局变量的差别
- poj 1155 tele
- 单词计数