OOP中私有和受保护之间的区别是什么?

时间:2017-01-14 06:28:39

标签: php oop private protected

我不明白面向对象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();

1 个答案:

答案 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);
    }

这既不适用于私有或受保护的方法。