PHP定义私有抽象函数/方法

时间:2017-07-24 11:07:13

标签: php

经历了这样的事情,我不知道

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

这是废话还是不是?

如果没有,请解释原因。

3 个答案:

答案 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的示例。

http://php.net/manual/en/language.oop5.abstract.php