为什么公私保护如此重要?

Why is public private protected so important?

提问人:user1159454 提问时间:6/6/2012 最后编辑:Matuser1159454 更新时间:8/24/2013 访问量:2242

问:

人们一直告诉我,我应该在所有类属性和方法前面使用公共、私有或受保护的访问修饰符。我真的不明白为什么。我是新来的,所以请耐心等待,但我的看法是这样的:

  • 我是唯一一个会处理我的代码的人。不是一个团队。

  • 我已经知道一切的含义,再加上使用一个编辑器告诉我所有声明的变量和属性,我知道我不会踩到我使用的变量。

我得到的解释之一是,它“保护或隐藏”了你的代码,不让那些可以看到它的人看到.....但是在PHP中,我知道用户无法首先看到您的代码,我向谁隐瞒了它?如果他们可以看到我的代码,那么他们要么是黑客,要么在我的帐户中,所以我无论如何都无法阻止他们。

如果我在团队中使用大量代码,我可以理解,但对于小事情来说,这似乎没有必要。

PHP OOP

评论

0赞 DevSolar 6/22/2012
可能应该去掉“PHP”标签,因为这个问题或多或少与语言无关。

答:

6赞 cHao 6/6/2012 #1

所谓的“封装”并不能保护你的代码免受他人的侵害。任何有权访问您的源代码的人都已经知道那里有什么。如果他们没有消息来源,那么他们也无法对你的公共内容做任何特别的事情。

它的作用是防止不在类中的代码(因此不必知道类是如何做事的)意外地混淆内部变量。这样一来,变量就不太可能以古怪的值结束——当它们出现时,你可以指向类并说损坏的代码在那里,而不是在应用程序的一半。

请注意,为了让它完全有用,你不能只为所有事情提供微不足道的二传手——这违背了整个目的。你的对象应该尽可能地成为一个“黑匣子”,这在一定程度上意味着外部代码应该能够看到和修改尽可能少的内部状态。让类管理自己的状态,并拥有获取它们完成工作所需的其他东西的方法。(这里一个半明显的例外是主要目的是运送数据的类型,但即使在那里,你也应该限制对任何不是该数据的访问,理想情况下,这些数据的设置者会验证它等等。public function setX($x) { $this->x = $x; }

6赞 Los Frijoles 6/6/2012 #2

我发现操作员可以帮助您不踩到自己的脚。随着我的应用程序越来越大,我有时会在制作一些早期类时忘记我最初的想法,并且有访问修改器来保护我有所帮助。它还有助于更好地组织您的代码,以便您了解什么是什么,并且不会最终编写意大利面条代码。此外,如果有一天你最终为别人编程,而有人可能会看你的代码,你不会因为你的编码风格而感到尴尬,因为习惯于使用语言的结构来构建你的代码将有助于你改进你的编码风格。结构就在那里,那么为什么不使用它们呢?

所以对于你目前的具体情况,我会说你现在所做的只是向你未来的自己隐瞒它,这样你就不会像“嗯......两年前,我为我的一个项目制作了这个课程,我现在将使用它“,然后试图以一种不应该被搞砸的方式弄乱内部,这可能会因为您可能不记得的原因而引起问题。

的确,除非您使用的是 C# 或 C++ 等编译语言,否则修饰符不会向潜在的最终用户隐藏您的实际代码。当用这些语言制作库时,修饰符变得更加重要,因为它们实际上对最终用户隐藏了你的代码,而且如果你最终在一个专有系统上工作,这可能很重要(尽管有时对最终用户来说很烦人)。

31赞 deceze 6/6/2012 #3

你没有向任何人“隐藏”你的代码,这是无稽之谈。

和 属性正在做的是告诉 PHP 你打算如何使用它们。创建类时,通常应该了解如何使用该类。您将拥有其他代码可以与之交互的部分,以及您不希望其他代码直接访问的其他部分。通常,您希望将类的各个部分限制为一组非常小的、定义良好的方法,这些方法不会更改。因为一旦你在代码的其他部分使用它们,改变它们就会变得很痛苦。所有 and 的东西都应该只在类本身内访问,所以以后改变它就不成问题了。protectedprivatepublicpublicprivateprotected

如果你是唯一一个处理代码的人,你可能会说这就像不使用“私有部分”一样简单。但是你会犯错误,随着时间的推移,你会忘记哪个部分属于哪里。将这些属性明确标记为或让 PHP 帮助您不违反自己的“使用条款”。这是“不要碰这个”的心理笔记和实际锁定某物之间的区别。protectedprivate

评论

2赞 DevSolar 6/22/2012
旁注:当从客户端的角度看待一个类(即使用该类的代码)时,您知道该部分对您来说才是最重要的。public
2赞 Aurimas Ličkus 6/6/2012 #4

它最需要的是代码封装和一致性,因此您可以在代码周围拥有一致的接口。

当你创建你的类时,你要指出你希望哪些部分受到公私保护,你还要提前思考并构建你的应用程序,数据应该如何与其他类交互,应对,这也是用于小项目的好事。

虽然对于小型项目看起来毫无用处,但我强烈建议您开始使用它,并养成使用它们的习惯,当您开始使用可见性修饰符时,您会发现它们非常有用。