我有一个关于输出显示方式的问题。私有/公共变量的PHP和继承
<?php
class Base
{
private $privattrib = "Private Attribute1";
function GetAttrib()
{
echo $this->privattrib;
}
}
class Derived extends Base
{
private $privattrib = "bute";
function GetAttrib()
{
parent::GetAttrib();
}
}
$b = new Base();
$d = new Derived();
$d->GetAttrib();
>
因此,对于上面的代码,我有几个问题:?
当我打电话父:: GetAttrib(),做的$ this的值(在Base的GetAttrib()方法)现在成为一个Base对象,还是它仍然是一个Derived对象?
输出是“Private Attribute1”。如果$ this引用了一个Derived对象,那么不应该显示为“bute”,因为private属性在基类中被覆盖了吗?
如果我将两个私有属性都更改为public,则输出现在是“bute”。为什么是这样?
很酷,但你的#1答案与#3没有冲突吗?例如,如果这两个attribs现在都是公共的,并且我运行父方法,它将使用派生类的公共覆盖属性。因此,Base对象可以看到Derived成员的属性。 我只是挑剔嘿。 – Ilya 2010-08-20 08:43:01
我不认为答案冲突,因为我小心地指定基本版本仅用于私有成员变量;如果成员变量是公开的,则通过指出您得到的不同行为来扩展这一点。 – 2010-08-20 12:57:36