Абстрактные частные функции
В следующем коде 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();
..
Ответы
Ответ 1
Абстрактные методы не могут быть частными, потому что по определению они должны быть реализованы производным классом. Если вы не хотите, чтобы он был public
, он должен быть protected
, что означает, что его можно увидеть производными классами, но никто другой.
Руководство PHP по абстрактным классам показывает вам примеры использования protected
таким образом.
Ответ 2
Абстрактный метод является открытым или защищенным. Это необходимо.