抽象私有函数

2022-08-30 13:37:28

下面的代码会让 PHP 不高兴 customMethod() 是私有的。为什么会这样?可见性是否取决于声明内容的位置而不是定义位置?

如果我想使 customMethod 仅对 Template 类中的样板代码可见,并防止它被重写,我是否可以让它受到保护并且是最终的?

模板.php:

abstract class Template() {
    abstract private function customMethod();

    public function commonMethod() {
        $this->customMethod();
    }
}

自定义A.php:

class CustomA extends Template {
    private function customMethod() {
       blah...
    }
}

主要.php

...
$object = new CustomA();
$object->commonMethod();
..

答案 1

抽象方法不能是私有的,因为根据定义,它们必须由派生类实现。如果你不希望它是 ,它需要是 ,这意味着它可以被派生类看到,但其他人看不到。publicprotected

关于抽象类的 PHP 手册向您展示了以这种方式使用的示例。protected


答案 2

如果你担心会在课外被叫到,你可以做类。customMethodCustomACustomAfinal

abstract class Template{
    abstract protected function customMethod();

    public function commonMethod() {
        $this->customMethod();
    }
}

final class CustomA extends Template {
    protected function customMethod() {

    }
}

推荐