-2

private在 PHP 中,方法和方法之间似乎没有很大的差异protected

问为什么我应该protected在 PHP Chatroom 中使用并得到这个答案:

除非你有充分的理由不这样做:是
的,而且有充分的理由是,如果你的代码是闭源库
,即使那样,它也可以被反射覆盖

所以 -

如果该private方法可能被反射覆盖,那么private方法的意义何在?

4

3 回答 3

9

private是否可以更protected轻松地编写正确的代码。正如您所注意到的,它们并非牢不可破——如果您愿意,没有什么可以阻止您绕过它们。那是因为它们旨在保护您免于意外做错事,而不是积极尝试

可以通过反射绕过它们,并不意味着你应该。您可以考虑使用“如果损坏privateprotected保修无效”标签;如果您忽略它们并直接自己乱搞东西,则对象/类可能无法正常运行。 在这一点上它没有义务,因为你已经自己搞砸了它的内部 - 而这样做的代码完全是罪魁祸首。

现在,至于标题中的问题……您使用protected专门为子类声明接口;您基本上声明您打算让他们直接使用这些东西,而private说您不打算。他们是否无视这取决于他们,但如果他们这样做,那就去他妈的。你试图警告他们。

于 2012-07-16T17:03:52.233 回答
1

是的,它可以使用反射来覆盖,但这不是重点,重点是在正常使用情况下限制对方法的访问,即如果有人正在使用您的类,他们不应该能够访问该方法,因为它违反了该类的合同拥有。

它是私有的/受保护的,具体取决于它的使用,所以如果有人将一个方法设为私有,那么他们已经完成了它,因为您不需要从另一个类访问它,如果他们已将其设为受保护,那么他们可能只是打算子类能够访问该方法。

于 2012-07-16T16:52:13.553 回答
-1
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'; 保护

于 2018-11-26T10:58:40.833 回答