在PHP中,private
和protected
方法之间似乎没有太大的差异。
我asked why I should use protected
in PHP Chatroom and got this answer:
除非你有充分的理由不这样做:是的 而且很有道理的,如果你的代码是闭源库 即便如此,它也可以被反射覆盖
所以 -
如果private
方法可能会被Reflection覆盖,那么private
方法中的重点是什么?
答案 0 :(得分:9)
private
和protected
可以让您更轻松地编写正确的代码。正如你所注意到的那样,它们并非牢不可破 - 如果你愿意,没有什么能阻止你绕过它们。那是因为它们的目的是保护你免受意外做错事,而不是主动尝试。
你可以用反射来绕过它们,并不意味着你应该。您可以将private
和protected
视为“保修无效,如果损坏”标签;如果你忽略它们并直接用自己的东西捣乱,那么对象/类可能表现不正常。 它没有义务在那时,因为你已经把它自己弄得乱七八糟了 - 这样做的代码完全是罪魁祸首。
现在,至于标题中的问题......你使用protected
来专门为子类声明接口;你基本上声明你打算让他们直接使用那些东西,而private
说你没有。他们是否无视这一点取决于他们,但如果他们这样做,那就搞砸了。你试图警告他们。
答案 1 :(得分:1)
是的,它可以使用反射覆盖,但这不是重点,重点是限制在正常使用下访问该方法,即如果有人使用您的课程,他们应该无法访问该方法,因为它违反了该类的合同。
它的私有/受保护取决于它的使用,所以如果有人将方法设为私有,那么他们已经完成了它,因为你不应该从另一个类访问它,如果他们已经使它受到保护,那么他们可能只希望子类能够访问该方法。
答案 2 :(得分:-1)
SIGINT
尝试更改private $ name ='Mark Henry';保护