经历了这样的事情,我不知道
abstract class Foo {
abstract private function test();
}
这是废话还是不是?
如果没有,请解释原因。
答案 0 :(得分:1)
如果你在抽象类中谈论私人范围,那么它不是一个不存在的
由于抽象类可以包含功能(而不是接口),因此它可以包含私有变量或方法。
我会给你这个链接一个很好的答案(即使是在java中,它与php一样)Why is there a private access modifier in an abstract class in Java, even though we cannot create an instance of an abstract class?
答案 1 :(得分:1)
如果您希望在继承链中进一步无法访问该方法,则有意义,例如:这个抽象类的孙子。例如:
abstract class Foo {
abstract private function test();
}
class FooChild extends Foo {
private function test()
{
// Here you implement the body of the method
}
public function bar()
{
$this->test(); // This will work
// Do something else
}
}
class FooGrandChild extends FooChild {
}
$grandchild = new FooGrandChild();
$grandchild->test(); // This will throw an exception
答案 2 :(得分:0)
抽象方法不能是私有的,因为根据定义它们必须由派生类实现。如果您不希望它是公共的,则需要对其进行保护,这意味着派生类可以看到它,但没有其他人可以看到。
关于抽象类的PHP手册向您展示了以这种方式使用protected的示例。