显然我对这些概念是全新的。我不理解为什么你要限制访问属性或方法。似乎你只需按预期结果编写代码即可。为什么要创建私有方法而不是简单地不调用该方法?这是为了迭代对象创建(如果我正确陈述的话),多个开发人员的情况(不要破坏其他人的工作),还是仅仅为了不会意外破坏你自己的工作?
显然我对这些概念是全新的。我不理解为什么你要限制访问属性或方法。似乎你只需按预期结果编写代码即可。为什么要创建私有方法而不是简单地不调用该方法?这是为了迭代对象创建(如果我正确陈述的话),多个开发人员的情况(不要破坏其他人的工作),还是仅仅为了不会意外破坏你自己的工作?
你的最后两点非常准确 - 你不需要多个开发人员就可以让你的代码出现问题。如果你长时间地工作在一个项目上,你会意识到你已经忘记了开始时做过的很多事情。
隐藏某些内容最重要的原因之一是允许你稍后安全地进行更改。如果一个字段是public的,然后几个月后你想要更改它,使得每次这个字段变化时,其他事情也发生变化,那么你就会遇到麻烦。因为它是public的,没有办法知道或记住有多少其他地方直接访问了该字段。如果它是private的,你就可以保证它不会在这个类的外部被修改。你可能会在它周围包装一个public方法,并且你可以轻松地更改该方法的行为。
一般来说,你越公开的东西,你就越需要担心与其他代码的兼容性。
$creditCardProcessor->charge(10.99, $creditCardNumber);
并期望它能正常工作。使用封装的原因有很多,其中最强的一点是:假设您正在使用由他人编写的大型复杂库。如果每个对象都没有受到保护,您可能会无意中访问或更改开发人员从未打算以那种方式进行操作的值。
隐藏数据使程序更易于概念化和实现。
重点在于封装。方法是私有的,它们执行内部工作,同时暴露优雅的函数使事情变得容易。例如,您可能会有一个$product->insert()函数,它利用4个内部函数来验证单例数据库对象、使查询安全等 - 这些是不需要公开的内部函数,如果调用了它们,可能会破坏其他结构或流程,这些结构或流程是由您作为开发人员放置的。
它使协作更容易,你告诉类的用户哪些部分不应经常更改,而且你可以保证如果他们只使用公共方法,你的对象将处于有意义的状态。
它不需要像区分私有/公共/其他那样严格(我指的是由语言强制执行)。例如,在Python中,这是通过命名约定来实现的。你知道你不应该去碰任何标记为非公共的东西。