The following code will have PHP unhappy that customMethod() is private. Why is this the case? Is visibility determined by where something is declared rather than defined?
If I wanted to make customMethod only visible to boilerplate code in the Template class and prevent it from being overriden, would I just alternatively make it protected and final?
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(); ..
Abstract methods cannot be private, because by definition they must be implemented by a derived class. If you don't want it to be public , it needs to be protected , which means that it can be seen by derived classes, but nobody else.
An abstraction function maps a state of the concrete machine to a state of the abstract machine. It explains how to interpret each state of the concrete machine as a state of the abstract machine. It solves the problem of the concrete and abstract machines having different sets of states.
Abstract methods cannot be private, because by definition they must be implemented by a derived class. If you don't want it to be public
, it needs to be protected
, which means that it can be seen by derived classes, but nobody else.
The PHP manual on abstract classes shows you examples of using protected
in this way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With