我不明白面向对象PHP中私有方法和受保护方法之间的区别。在将方法设为私有后,我可以从extends类访问它。请检查以下代码 -
<?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 :(得分: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() [...]
Max将返回“Liam”,因为getName()
调用Liam类中的getFirstName()
,而不是来自扩展它的类中的$max = new Max();
$max->iAmProtected();
。这意味着使用私有方法,您可以确保在您的类中每次调用此方法时都会使用此方法,并且永远不会覆盖它。
一般来说解释一下:
私有方法只能在类中访问。它们不能被外部或甚至是扩展它的类覆盖或访问。
受保护的方法可以在扩展类中的类和中访问,但是你不能从外部调用它们,如:
public async Task<IEnumerable<PrivateChatMessageDTO>> GetPrivateMessages(string fromUserId, string toUserId)
{
return await _service.GetPrivateMessages(fromUserId, toUserId);
}
这既不适用于私有或受保护的方法。