【发布时间】:2015-01-08 13:46:27
【问题描述】:
考虑以下示例。 b 类正在扩展 a 类。
1) 类b扩展类a时,会覆盖属性a的值吗?
2) 类b扩展类a时,会覆盖方法say吗?
class a {
public $a = 5;
function say() {
echo "Hi";
}
}
class b extends a {
public $a = 6;
function say() {
echo "Hi";
}
}
【问题讨论】:
-
变量名前缺少 $
-
为什么不直接测试一下?
-
但我可以使用 b 类中的父级访问 a 类属性和方法?如何?如果 b 类覆盖了 a 类的属性和方法?
-
@vivek2015 B 类没有
overwrite方法,它是overrides方法。类 A 中的实际方法仍将存在以供其他实例/子级使用。 -
方法可以通过 parent::method() 访问(在您的示例中: parent::say() )。但通常没有必要这样做(原因请参见此处:stackoverflow.com/questions/11237511/…)。无法直接访问覆盖的属性,您必须使用反射类。这在生产代码中通常也不是必需的。我怀疑您将“类”(一种模板)与“对象”(类的具体实例)混淆了