Подтвердить что ты не робот

Абстрактные частные функции

В следующем коде PHP будет недоволен тем, что customMethod() является закрытым. Почему это так? Определяется ли видимость, где что-то объявлено, а не определено?

Если бы я хотел, чтобы customMethod был только видимым для шаблона кода в классе Template и не позволял ему переопределяться, мог бы я просто сделать его защищенным и окончательным?

template.php:

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

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

CustomA.php:

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

main.php

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

Ответ 1

Абстрактные методы не могут быть частными, потому что по определению они должны быть реализованы производным классом. Если вы не хотите, чтобы он был public, он должен быть protected, что означает, что его можно увидеть производными классами, но никто другой.

Руководство PHP по абстрактным классам показывает вам примеры использования protected таким образом.

Ответ 2

Абстрактный метод является открытым или защищенным. Это необходимо.