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