-1
說,例如我有兩個類A
和B
:類屬性是否在擴展類上被覆蓋?
答:
class A {
private $name = "Joe";
}
B:
class B extends A {
private $name = "Scotto";
}
會有什麼的$name
的價值是什麼?它是否覆蓋父類屬性,或者它會在實例中被實例化嗎?任何幫助將是偉大的,謝謝!
說,例如我有兩個類A
和B
:類屬性是否在擴展類上被覆蓋?
答:
class A {
private $name = "Joe";
}
B:
class B extends A {
private $name = "Scotto";
}
會有什麼的$name
的價值是什麼?它是否覆蓋父類屬性,或者它會在實例中被實例化嗎?任何幫助將是偉大的,謝謝!
我會建議在文檔頁面上特別閱讀this comment。重點在於方法,但屬性相同
...私有方法只對定義它們的類可見,而子類不會看到父級的私有方法。如果孩子沒有看到父母的私人方法,孩子不能覆蓋他們。
你舉的例子:
class A {
private $name = "Joe";
public function getName() {
return $this->name;
}
}
class B extends A {
private $name = "Scotto";
}
class C extends A {
private $name = "Scotto";
public function getName() {
return $this->name;
}
}
$a = new A;
$b = new B;
$c = new C;
$a->getName(); // 'Joe'
$b->getName(); // 'Joe'
$c->getName(); // 'Scotto'
@naththedeveloper我可以很容易地嘗試,但我正在尋找一個更深入的答案不僅僅是「哇,好,這就是它」 –
爲什麼會被替換?私有意味着只有這個類可以訪問這個屬性。因此,每個類都有自己的'$ name'定義。 [Clicky](https://eval.in/private/830e62ffefe9ab) –
但是,當'$ name'被定義爲'protected'或'public'時,它確實被'Scotto'取代。我建議閱讀[文檔](http://php.net/manual/en/language.oop5.visibility.php)瞭解可見性。它在示例代碼中聲明:「我們可以重新聲明公共和受保護的屬性,但不是私有的」。 –