我遇到了以下結構:繼承和函數調用父和子類
// parent class
class A
{
public function myFunc1()
{
$this->myFunc2();
}
private function myFunc2()
{
echo "called from class A";
}
}
// sub-class
class B extends A
{
private function myFunc2()
{
echo "called from class B";
}
}
$foo = new B();
$foo->myFunc1();
我所料,因爲在B類沒有myFunc1(),父函數被調用。這似乎是正確的。
現在,爲了安全起見,我var_dump
$此在myFunc1(),它表明,這是由B型
對象從我的理解,它應該調用myfunc2所( )來自B類的,但是這沒有發生。它是從調用類A方法
從類稱爲A
,而不是
從B類稱爲
是,該功能是私人,如果我將其更改爲保護,它按預期工作。但私人暗示,當我處於特定的環境中時,我可以訪問這個功能,不是嗎?
此代碼應該失敗。無法在對象上調用私有方法。只從內部。 – Erik
私人功能只能從班級內部進行訪問,該班的孩子只能訪問其父母的公共或受保護功能 – andrew
想想編寫代碼的人。當她寫'myFunc1'時,她用* knowledge *做了這樣的事情,即存在一個私有類的'myFunc2'和一個* expectation *,這是一個被調用的類。 – bishop