我有一個關於輸出顯示方式的問題。私有/公共變量的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