title: Abstract private functions
body: <p>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?</p>
  
  <p>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?</p>
  
  <p>Template.php:</p>
  
  <pre><code>abstract class Template() {
      abstract private function customMethod();
  
      public function commonMethod() {
          $this-&gt;customMethod();
      }
  }
  </code></pre>
  
  <p>CustomA.php:</p>
  
  <pre><code>class CustomA extends Template {
      private function customMethod() {
         blah...
      }
  }
  </code></pre>
  
  <p>Main.php</p>
  
  <pre><code>...
  $object = new CustomA();
  $object-&gt;commonMethod();
  ..
  </code></pre>