private
在 PHP 中,方法和方法之间似乎没有很大的差异protected
。
我问为什么我应该protected
在 PHP Chatroom 中使用并得到这个答案:
除非你有充分的理由不这样做:是
的,而且有充分的理由是,如果你的代码是闭源库
,即使那样,它也可以被反射覆盖
所以 -
如果该private
方法可能被反射覆盖,那么private
方法的意义何在?
private
是否可以更protected
轻松地编写正确的代码。正如您所注意到的,它们并非牢不可破——如果您愿意,没有什么可以阻止您绕过它们。那是因为它们旨在保护您免于意外做错事,而不是积极尝试。
你可以通过反射绕过它们,并不意味着你应该。您可以考虑使用“如果损坏private
则protected
保修无效”标签;如果您忽略它们并直接自己乱搞东西,则对象/类可能无法正常运行。 在这一点上它没有义务,因为你已经自己搞砸了它的内部 - 而这样做的代码完全是罪魁祸首。
现在,至于标题中的问题……您使用protected
专门为子类声明接口;您基本上声明您打算让他们直接使用这些东西,而private
说您不打算。他们是否无视这取决于他们,但如果他们这样做,那就去他妈的。你试图警告他们。
是的,它可以使用反射来覆盖,但这不是重点,重点是在正常使用情况下限制对方法的访问,即如果有人正在使用您的类,他们不应该能够访问该方法,因为它违反了该类的合同拥有。
它是私有的/受保护的,具体取决于它的使用,所以如果有人将一个方法设为私有,那么他们已经完成了它,因为您不需要从另一个类访问它,如果他们已将其设为受保护,那么他们可能只是打算子类能够访问该方法。
class GrandPa
{
private $name = 'Mark Henry';
function getName(){
return $this->name;
}
}
class Daddy extends GrandPa
{
function displayGrandPaName()
{
return $this->name;
}
}
$daddy = new Daddy;
echo $daddy->getName(); // work
echo $daddy->displayGrandPaName(); // Error Undefined property:
尝试更改私人 $name = 'Mark Henry'; 保护