PHP 中可见性修饰符的意义是什么?
What is the significance of visibility modifiers in PHP?
我试图找出在程序中使用不同访问修饰符的确切优势。据我所知,所有那些可以通过面向对象编程实现的功能也可以用过程编程方法来完成。
说真的,我找不到合适的解释,只能与所谓的 "real-life" 对象进行比较。我现在真正想知道的是,访问修饰符如何在面向对象编程中发挥重要作用,超越普通过程编程中的函数和变量?
我真的很生气并开始讨厌 OOPS,对我来说,这只是一种需要更多步骤来完成任务的方法,使用过程代码更容易实现。如果有人能为我提供参考资料,那也将不胜感激。
存在不同访问修饰符的主要原因是确保考虑到程序的哪些部分应该能够修改各种值。如果使用得当,它们将保护 class 免受在不使用正确渠道的情况下修改值的不当尝试。
然而,还有另一个与重构有关的原因,这是我在对 OO 的欣赏中很晚才了解到的。在大型系统的上下文中考虑此代码:
class Spaceship
{
private function teleport()
{
}
}
假设我们需要更改此方法以添加一个选项参数:我们的首要任务是扫描整个代码库以查看它在哪里被使用。然而,在这种情况下我们不需要这样做:private
是一个非常快速的指示,它只能在同一个 class 中被调用。这种快速的理解帮助我们意识到这样的变化将是微不足道的。
如果该方法声明为 protected
,那么我们的工作量会更大一些,因为我们需要检查 class 和所有子 classes - 但我们立即知道重构工作并不大,就好像 public
.
我要补充一点,OO 是您在掌握 'Aha!' 时刻之前只需要练习的事情之一。即使是非常教科书的方法也会展示有效的练习(并且,希望鼓励 reader 使用 OO 语言来尝试它们)。我已经建立了许多我无法想象以程序方式完成的系统,但我无法证明——这就是经验的来源。
可见性修饰符,更广为人知的名称是访问修饰符,决定了 class、class 方法(函数)和 class 变量的访问级别。它指示代码的其他部分是否可以看到并因此使用该部分代码。
面向对象编程不同于过程编程。通过解释这一点,您将了解访问级别的概念。使用过程编程,您可以自上而下地进行编程,并且可以通过使用函数来重用代码。根据程序员的不同,代码将被分割成更小的部分并存储在各种文件中。
对于面向对象编程,逻辑会发生变化。 class 代表某种东西,在大多数示例中,他们使用现实生活中的事物,例如 car/house。 class 具有属性(class 变量)并且 class 可以做某事/具有某些行为(class 方法)
考虑到这一点,下面是一个示例,说明为什么使用访问修饰符:class Car
具有属性(class 变量)和行为(class 方法)。您可以想象汽车可以做什么:drive()
、stop()
和 steer()
。我们觉得代码的所有其他部分都应该能够使用这些,所以我们将这些行为的访问修饰符设置为 public(这意味着:访问所有)。
同时我们的 Car
有一些代码的其他部分可能不需要知道的隐藏行为:shiftGear()
,显然 drive()
和 stop()
方法使用它的。我们可以让 shiftGear()
私有(这意味着:只有 Car
class 可以使用它)所以它对外界是隐藏的。
我试图找出在程序中使用不同访问修饰符的确切优势。据我所知,所有那些可以通过面向对象编程实现的功能也可以用过程编程方法来完成。
说真的,我找不到合适的解释,只能与所谓的 "real-life" 对象进行比较。我现在真正想知道的是,访问修饰符如何在面向对象编程中发挥重要作用,超越普通过程编程中的函数和变量?
我真的很生气并开始讨厌 OOPS,对我来说,这只是一种需要更多步骤来完成任务的方法,使用过程代码更容易实现。如果有人能为我提供参考资料,那也将不胜感激。
存在不同访问修饰符的主要原因是确保考虑到程序的哪些部分应该能够修改各种值。如果使用得当,它们将保护 class 免受在不使用正确渠道的情况下修改值的不当尝试。
然而,还有另一个与重构有关的原因,这是我在对 OO 的欣赏中很晚才了解到的。在大型系统的上下文中考虑此代码:
class Spaceship
{
private function teleport()
{
}
}
假设我们需要更改此方法以添加一个选项参数:我们的首要任务是扫描整个代码库以查看它在哪里被使用。然而,在这种情况下我们不需要这样做:private
是一个非常快速的指示,它只能在同一个 class 中被调用。这种快速的理解帮助我们意识到这样的变化将是微不足道的。
如果该方法声明为 protected
,那么我们的工作量会更大一些,因为我们需要检查 class 和所有子 classes - 但我们立即知道重构工作并不大,就好像 public
.
我要补充一点,OO 是您在掌握 'Aha!' 时刻之前只需要练习的事情之一。即使是非常教科书的方法也会展示有效的练习(并且,希望鼓励 reader 使用 OO 语言来尝试它们)。我已经建立了许多我无法想象以程序方式完成的系统,但我无法证明——这就是经验的来源。
可见性修饰符,更广为人知的名称是访问修饰符,决定了 class、class 方法(函数)和 class 变量的访问级别。它指示代码的其他部分是否可以看到并因此使用该部分代码。
面向对象编程不同于过程编程。通过解释这一点,您将了解访问级别的概念。使用过程编程,您可以自上而下地进行编程,并且可以通过使用函数来重用代码。根据程序员的不同,代码将被分割成更小的部分并存储在各种文件中。
对于面向对象编程,逻辑会发生变化。 class 代表某种东西,在大多数示例中,他们使用现实生活中的事物,例如 car/house。 class 具有属性(class 变量)并且 class 可以做某事/具有某些行为(class 方法)
考虑到这一点,下面是一个示例,说明为什么使用访问修饰符:class Car
具有属性(class 变量)和行为(class 方法)。您可以想象汽车可以做什么:drive()
、stop()
和 steer()
。我们觉得代码的所有其他部分都应该能够使用这些,所以我们将这些行为的访问修饰符设置为 public(这意味着:访问所有)。
同时我们的 Car
有一些代码的其他部分可能不需要知道的隐藏行为:shiftGear()
,显然 drive()
和 stop()
方法使用它的。我们可以让 shiftGear()
私有(这意味着:只有 Car
class 可以使用它)所以它对外界是隐藏的。