PHP中可见性修饰符的意义是什么


What is the significance of visibility modifiers in PHP?

我正试图弄清楚在程序中使用不同访问修饰符的确切优势。据我所知,通过面向对象编程可以实现的所有功能也可以用过程编程方法来实现。

说真的,我找不到合适的解释,只能与所谓的"现实生活"对象进行比较。我现在真正想知道的是,访问修饰符是如何在面向对象编程中发挥重要作用的,它超过了正常过程编程中的函数和变量?

我真的很恼火,开始讨厌OOPS,对我来说,OOPS只是一种需要更多步骤才能完成任务的方法,而使用过程代码更容易实现。如果有人能为我提供推荐信,我也将不胜感激。

存在不同访问修饰符的主要原因是为了确保考虑到程序的哪些部分应该能够修改各种值。如果使用得当,它们将保护类在不使用适当通道的情况下不受修改值的不当尝试的影响。

然而,还有另一个原因与重构有关,这是我在欣赏OO时很晚才学到的。在大型系统的上下文中考虑此代码:

class Spaceship
{
    private function teleport()
    {
    }
}

想象一下,我们需要改变这个方法来添加一个选项参数:我们的第一个任务是扫描整个代码库,看看它在哪里被使用过。然而,在这种情况下我们不需要:private是一个非常快速的指示,表明它只能在同一个类中调用。这种迅速的理解有助于我们认识到,这样的改变将是微小的。

如果该方法被声明为protected,那么我们的工作就更大了,因为我们需要检查类和所有子类——但尽管如此,我们立即知道这并不是一个大的重构工作,就像它是public一样。


我想补充一点,OO是你只需要练习的东西之一,直到你得到"啊哈!"片刻即使是非常教科书式的方法也会展示行之有效的练习(希望能鼓励读者使用OO语言来尝试)。我已经建立了许多我无法想象以程序化的方式完成的系统,但我无法证明——这就是经验的来源。

Visibility修饰符,也称为访问修饰符,用于确定类、类方法(函数)和类变量的访问级别。它指示代码的其他部分是否可以被看到并使用。

面向对象编程不同于过程编程。通过解释这一点,您将了解访问级别的概念。使用过程式编程,您可以自上而下地进行编程,并且可以通过使用函数来重用代码。根据程序员的不同,代码将被分割成更小的部分并存储在各种文件中。

通过面向对象编程,逻辑发生了变化。类代表某种东西,在大多数例子中,它们使用现实生活中的东西,比如汽车/房子。一个类有属性(类变量),一个类可以做某事/有一些行为(类方法)

考虑到这一点,下面是一个使用访问修饰符的示例:类Car具有属性(类变量)和行为(类方法)。你可以想象一辆车能做什么:drive()stop()steer()。我们觉得代码的所有其他部分都应该能够使用这些,所以我们将这些行为的访问修饰符设置为public(意思是:访问所有内容)。

同时,我们的Car有一些隐藏的行为,代码的其他部分可能不需要知道:shiftGear(),显然drive()stop()方法使用了它。我们可以将shiftGear()设为私有(这意味着:只有Car类可以使用它),所以它对外界是隐藏的。