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

时间:2012-06-06 05:33:56

标签: php oop class

人们一直告诉我,我应该在所有类属性和方法之前使用公共,私有或受保护的访问修饰符。我真的不明白为什么。我很新,所以忍受我,但我看到的方式是这样的:

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

  • 我已经知道一切意味着什么,加上使用编辑器告诉我所有声明的变量和属性,我知道我不会踩到我用过的变量。

我得到的一个解释是它“保护或隐藏”你的代码可能会看到它的人.....但在PHP中我无法让用户在第地方,我是谁隐藏它的?如果他们能看到我的代码,那么他们要么是黑客,要么是我的帐户,所以无论如何我都无法阻止他们。

我能理解我是否在团队中处理大量代码,但对于小事情来说似乎没必要。

4 个答案:

答案 0 :(得分:25)

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

protectedprivate属性正在做的是告诉PHP 您打算如何使用它们。创建类时,通常应该知道如何使用该类。您将拥有public部分,其他代码可以与之交互,以及您不希望直接访问其他代码的其他部分。通常,您希望将类的public部分限制为一组非常小的明确定义的方法,这些方法不会发生变化。因为一旦你在代码的其他部分使用它们,改变它们就会变得很痛苦。所有privateprotected内容只能在类本身中访问,因此稍后更改它不会成为问题。

如果你是唯一一个处理代码的人,你可能会说它就像不使用“私有部分”一样容易。但是你会犯错误,而你会忘记一段时间内属于哪个部分。将这些属性明确标记为protectedprivate可让PHP帮助您不违反自己的“使用条款”。这是“不要碰这个”的心理记录与实际上对某事物的锁定之间的区别。

答案 1 :(得分:5)

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

它的作用是防止不在类中的代码(因此不必知道类如何处理事情)意外地使用内部变量。这样,变量不太可能结束古怪的值 - 当它们这样做时,你可以指向类并说出破碎的代码那里,而不是应用程序的一半。< / p>

请注意,为了使其有用,您不能只为public function setX($x) { $this->x = $x; }之类的所有东西设置琐碎的设置器 - 这会破坏整个目的。您的对象应该与您可以制作的“黑盒子”一样多,这部分意味着外部代码应该能够尽可能少地查看和修改其内部状态。让班级管理自己的州,并有方法,采取他们完成工作所需的其他东西。 (这里有一个半明显的例外是主要目的是传送数据的类型,但即使在那里你也应该限制对不是那些数据的任何东西的访问,理想情况下这些数据的设置者会验证它等等。)

答案 2 :(得分:5)

我发现操作符可以帮助您不要自己踩脚。随着我的应用程序变得越来越大,我有时会在制作一些早期的课程时忽略了我原来的想法,并且使用访问修饰符来保护我有所帮助。 它还有助于更好地组织代码,以便您了解什么是什么,最终不会编写意大利面条代码。另外,你有可能在有人可能会看到你的代码的情况下最终为其他人编程,你不会因为你的编码风格而感到尴尬使用语言的结构来构建代码将帮助您改进编码风格。构造在那里,为什么不使用它们?

所以对于你目前的具体情况,我会说你现在正在做的就是将它隐藏在你未来的自我中,这样你就不会像“嗯......我为我的一个项目做了这个课程2几年前,我现在将使用它“然后试图以一种他们不应该被混淆的方式弄乱内部,这可能会因为你可能无法记住的原因而导致问题。

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

答案 3 :(得分:2)

所需的主要功能是代码封装和一致性,因此您可以在代码周围使用一致的界面。

当你在创建课程时,你正在指出你想要公共 - 私人保护的部分,你还要提前思考并构建你的应用程序,数据应该如何与其他类交互,应对,这也是好事。用于小型项目。

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