PHP 面向对象编程中的抽象方法可见性

Abstract methods visibility in PHP Object-oriented programming

我有一个抽象class,我不知道定义test()函数的两种方式之间的区别

abstract class Foo {
    abstract protected function test();
}

还有这个

abstract class Foo {
    abstract function test();
}

这有什么区别吗?

来自the PHP manual

Class methods may be defined as public, private, or protected. Methods declared without any explicit visibility keyword are defined as public.

所以答案是否定的,它们不一样:

  • abstract protected function test(); 只能在 class 本身内以及通过继承和父 classes;
  • 访问
  • abstract function test(); 可以从任何地方访问。

为了与 PHP 4 兼容(其中所有内容都是 public 并且无法指定其他内容),class 属性和方法的 default visibilitypublic.

因此,

abstract class Foo {
    abstract function test();
}

等同于:

abstract class Foo {
    abstract public function test();
}