私人和受保护之间的区别

时间:2012-07-16 16:46:05

标签: php oop class private protected

在PHP中,privateprotected方法之间似乎没有太大的差异。

asked why I should use protected in PHP Chatroom and got this answer:

  

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

所以 -

如果private方法可能会被Reflection覆盖,那么private方法中的重点是什么?

3 个答案:

答案 0 :(得分:9)

privateprotected可以让您更轻松地编写正确的代码。正如你所注意到的那样,它们并非牢不可破 - 如果你愿意,没有什么能阻止你绕过它们。那是因为它们的目的是保护你免受意外做错事,而不是主动尝试

可以用反射来绕过它们,并不意味着你应该。您可以将privateprotected视为“保修无效,如果损坏”标签;如果你忽略它们并直接用自己的东西捣乱,那么对象/类可能表现不正常。 它没有义务在那时,因为你已经把它自己弄得乱七八糟了 - 这样做的代码完全是罪魁祸首。

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

答案 1 :(得分:1)

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

它的私有/受保护取决于它的使用,所以如果有人将方法设为私有,那么他们已经完成了它,因为你不应该从另一个类访问它,如果他们已经使它受到保护,那么他们可能只希望子类能够访问该方法。

答案 2 :(得分:-1)

SIGINT

尝试更改private $ name ='Mark Henry';保护