PHP:封装的目的是什么?

时间:2010-09-04 23:08:02

标签: php methods properties encapsulation

我在具体谈论可以应用于属性和方法的public,private和protected关键字。我到处寻找,我知道他们做了什么以及如何使用它们,但是在编程时看不出它们是如何实用的。有人可以解释或举例吗?

4 个答案:

答案 0 :(得分:7)

封装(范围)的主要目的是确保编写无法破解的代码。这通常适用于范围,所以让我在函数中使用一个更简单的局部变量示例:

function xyz ($x) {
  $y = 1;
  while ($y <= 10) {
    $array[] = $y * $x;
    $y++;
  }
  return $array;
}

此函数的目的是传递一个数字并返回一个数组。示例代码非常基本。为了使函数xyz()可靠,您需要保证每次都执行完全相同的操作。那么,如果某人有能力从外部改变$ y或$ array的初始值呢?甚至是$ x?如果您能够从函数外部执行此操作,则无法再保证该函数返回的内容。

这就是范围(封装)发挥作用的地方。这是一种设置边界,分配对变量(以及函数,属性,方法,对象)可以做什么和不可以做什么的权限的方法,以确保代码位总是完全按预期执行。

比如任何内置的php函数,比如... strtolower()或preg_match()或者......好吧。他们期望将参数传递给他们,并且他们返回特定的东西。在内部有变量,循环等...来获取输入并吐出输出。如果您能够从外部更改这些内容,则无法保证strotolower()将返回您提供的小写字符串,并且无法实现具有可重用代码块的目的。

当你为自己编程时,这并不一定有用,但当你编写代码供许多人使用和共享时,特别是使用涉及插件/插件等的代码时...它是无价的确保您的代码执行它应该执行的操作,并以预期的方式访问/使用/调用。

答案 1 :(得分:1)

私有/受保护的方法用于编译语言,如C ++和Java。如果编译代码而不是以脚本形式保留,则这些规则是可执行的。在这些语言中,特别可以隐藏繁琐的内部或机器级实现。

PHP只有这些功能,因为它的开发人员认为缺乏保护/私有方法意味着人们嘲笑PHP4不是一种适当的面向对象语言。
在PHP中使用封装作为设计概念是无可争议的。然而,这些语言结构的使用不是必需的,并且无论如何都可以在源代码中轻松删除。但是代替正确的图书馆文档或者如果编程人员不遵守编码风格,限制访问是有用的。

所以,总之:技术用例微薄,鼓励使用指定的接口来抽象流程没关系。然而,通常以一种使所有期望的功能和数据易于获得的方式设计API更有意义,因此减少了访问无关内部的诱惑。您暴露的越多,以后更改内部处理就越困难。您暴露的固有数据越多,解决方法或复杂的对象结构就越少。

答案 2 :(得分:0)

我认为Grady Booch总结得很好:

“封装用于分离抽象的合同接口及其实现”

答案 3 :(得分:0)

你可以在同一here找到一个很好的讨论。虽然它与.net(不是在PHP上)有关,但是讨论仍然很普遍,其中也包括对维基百科文章的讨论。