2017-01-14 21 views
0

我不明白在面向對象的PHP中私有方法和受保護方法之間有什麼不同。在私有方法之後,我可以從extends類訪問它。請檢查下面的代碼 -私有和受保護的OOP有什麼不同?

<?php 

class person{ 

private function namedilam(){ 

    return "likhlam"; 

} 

public function kicu(){ 

    return $this->namedilam(); 

} 

} 

class second extends person{ 

} 

$info = new second; 

echo $info->kicu(); 
+0

看來你沒有直接訪問它。你可以調用'$ info-> namedilam()'? – alayor

+0

you'r調用公共函數kicu()不是私有函數namedilam() – Sepultura

+1

可能重複[公共,私有和受保護的區別是什麼?](http://stackoverflow.com/questions/4361553/what -is最差之間,公共和私營部門和保護) – dbrumann

回答

0

,當你做這樣的差異會變得清晰:

class Liam { 
    private getFirstName() { 
     return "Liam"; 
    } 

    public function getName() { 
     return $this->getFirstName(); 
    } 
} 

class Max extends Liam { 
    private function getFirstName() { 
     return "Max"; 
    } 
} 

class Peter extends Liam { 
    public function getLiamsName() { 
     return $this->getFirstName(); 
    } 
} 

$max = new Max(); 
echo $max->getName(); 
// returns "Liam", not "Max" as you might expect 

$peter = new Peter(); 
echo $peter->getLiamsName(); 
// PHP Fatal error: Uncaught Error: Call to private method Liam::getFirstName() [...] 

馬克斯將返回「利亞姆」,因爲getName()電話getFirstName()在利亞姆類,而不是一個來自課堂。這意味着使用私有方法,您可以確保在課堂中每次調用此方法時都會使用此方法,並且這種方法不會被覆蓋。

解釋它在一般條款:

私有方法只是在類中訪問。它們不能被外部覆蓋或訪問,甚至不能被擴展。

保護的方法是在擴展類的類內部觸及,但你不能從外部喜歡稱他們爲:

$max = new Max(); 
$max->iAmProtected(); 

,將不會有私人或受保護的方法的工作。

相關問題