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

use*_*454 13 php oop class

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

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

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

我得到的一个解释是它"保护或隐藏"你的代码与那些可以看到它的人......但是在PHP中我无法让用户首先看到你的代码,我把它藏起来了吗?如果他们能看到我的代码,那么他们要么是黑客,要么是我的帐户,所以无论如何我都无法阻止他们.

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

dec*_*eze 25

你不是从任何人"隐藏"你的代码,这是胡说八道.

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

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

  • 旁注:当从客户的角度看一个类(即代码*使用*那个类)时,你知道`public`部分对你来说很重要. (2认同)

cHa*_*Hao 5

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

它的作用是防止不在类中的代码(因此不必知道类如何做事)不小心乱用内部变量.这样,变量不太可能结束古怪的值 - 当它们这样做时,你可以指向类并说出破碎的代码在那里,而不是在应用程序的中途.

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


Los*_*les 5

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

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

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