我是OOP/PHP的新手.类中可见性和可扩展性的实用性是什么?

Mar*_*ley 15 php oop extensibility visibility class

我显然对这些概念不熟悉.我只是不明白为什么你会限制对属性或方法的访问.您似乎只是根据预期结果编写代码.为什么要创建一个私有方法而不是简单地不调用该方法?它是用于迭代对象创建(如果我说的正确),多开发人员的情况(不要搞砸其他人的工作),或者只是因为你不会意外搞乱自己的工作?

Jef*_*nal 8

我们创建私有方法,以便我们的类的消费者不必关心实现细节 - 他们可以专注于我们的类为他们提供的一些漂亮的东西.

此外,我们有义务考虑每种可能的公共方法.通过将方法设为私有,我们减少了类必须支持的特性数量,并且我们可以更自由地更改它们.

假设您有一个Queue类 - 每次调用者将一个项添加到队列时,可能需要增加队列的容量.由于底层实现,设置容量并非易事,因此您将其分解为单独的函数以提高函数的可读性Enqueue.由于调用者不关心队列的容量(你正在为它们处理它),你可以将方法设为私有:调用者不会被多余的方法分心,你不必担心调用者会做出荒谬的事情对于容量,您可以随时更改实现,而不会破坏使用您的类的代码(只要它仍然在您的类定义的有限用例内设置容量).


Tes*_*rex 8

你的最后两点非常准确 - 你不需要多个开发人员让你的东西搞砸了.如果你在一个项目上工作的时间足够长,你会发现你已经忘记了你在开始时所做的很多事情.

隐藏某些内容的最重要原因之一是您可以在以后安全地进行更改.如果一个字段是公开的,几个月之后你想要改变它,这样每次字段改变时,会发生其他事情,你就会遇到麻烦.因为它是公开的,所以无法知道或记住有多少其他地方直接访问该字段.如果它是私人的,您可以保证在本课程之外不会被触及.您可能有一个公共方法,您可以轻松地更改该方法的行为.

一般来说,你公开的东西越多,就越需要担心与其他代码的兼容性.


Tyl*_*ter 7

这一切都归结为封装.这意味着要隐藏班级的内部,只关心它的作用.如果你想要一个信用卡处理课程,你真的不关心它如何处理信用卡.你只是希望能够:$creditCardProcessor->charge(10.99, $creditCardNumber);并希望它能够发挥作用.

通过将某些方法设为公共,其他方法为私有或受保护,我们为其他人留下了一个入口方式,以便他们知道从哪里调用代码是安全的.公共方法和变量称为"接口".

对于任何类,您都有一个实现.这就是班级履行职责的方式.如果它是一个冰沙制作类,该类如何添加成分,它添加什么成分等都是实施的一部分.外部代码不应该知道和/或关心实现.

类的另一面是它的界面.接口是类的开发人员打算由外部代码调用的公共方法.这意味着您应该能够调用任何公共方法,它将正常工作.


小智 5

使用封装有几个原因,其中最强的一个是:想象一下使用其他人编写的大型复杂库.如果每个对象都不受保护,您可能会在不知不觉中访问或更改开发人员从未打算以这种方式操作的值.

隐藏数据使程序更易于概念化并更易于实现.