PHP类中的可见性是否重要,为什么?

bey*_*ski 5 php visibility private class public

如您所知,PHP类具有私有,公共和受保护的关键字.我刚刚开始编写类,我想知道PHP5中类可见性的优点是什么.

当然也有缺点......

Fel*_*ing 10

如果您想应用信息隐藏(封装)等OOP实践,这将非常有用.

如果您将类成员声明为private,则无法从类外部的代码访问它们.您必须提供访问它们的方法.这将您的类的接口与实际实现分开.
使用您的类的其他代码不需要知道类成员的名称或您在内部如何实际存储信息.

例:

考虑一个课程Books以某种方式给我一本书清单.我可以定义一个public包含一系列书籍的成员:

class Books {
    public $list;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我定义一个方法getList(),我可以稍后更改实现,而不会影响使用该类的代码:

class Books {
    private $list;
    public function getList() {
         // get list from database, from XML, etc.
         // might use $list internally but does not have to
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,您不需要修饰符private,protected或者public实现此行为,但它会带来更好的结构化代码和更清晰的接口.想象一下,你有一个既有a public $list又有方法的类getList().你怎么知道使用哪一个?
这不仅适用于获取值,尤其适用于设置值.

如果你使用它们没有缺点,只有恕我直言的优点.它们之间的区别在于可见性的范围.public可以从外部代码protected访问private成员,只能从类中继承成员继承类和成员.

方法也可以具有这些修饰符并遵循类似的目的.例如,如果一个方法被声明为private,很明显它可能是某种辅助方法,仅在内部使用,不应该从外部调用.


所以最后归结为两件事:

  • 控制:可以通过哪种方式访问​​班级的哪些部分
  • 自我记录或理解:使用你的班级的其他人可以更容易地弄清楚,他们应该访问哪些课程,哪些不是.