Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Abstract private functions

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(); .. 
like image 507
jontyc Avatar asked Oct 29 '11 13:10

jontyc


People also ask

Can abstract functions be private?

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.

What are abstract functions?

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.


1 Answers

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.

like image 167
Tesserex Avatar answered Sep 19 '22 17:09

Tesserex