title: Strange behavior when overriding private methods
body: <p>Consider the following piece of code:</p>
  
  <pre><code>class foo {
      private function m() {
          echo 'foo-&gt;m() ';
      }
      public function call() {
          $this-&gt;m();
      }
  }
  
  class bar extends foo {
      private function m() {
          echo 'bar-&gt;m() ';
      }
      public function callbar() {
          $this-&gt;m();
      }
  }
  
  $bar = new bar;
  
  $bar-&gt;call();
  $bar-&gt;callbar();
  </code></pre>
  
  <p>Now, changing the visibility of the <code>m()</code> method, I get:<br>
  (<code>+</code> for <code>public</code>, <code>-</code> for <code>private</code>)</p>
  
  <pre><code>Visibility              bar-&gt;call()    bar-&gt;callbar() 
  ======================================================
  -foo-&gt;m(), -bar-&gt;m()    foo-&gt;m()       bar-&gt;m()
  -foo-&gt;m(), +bar-&gt;m()    foo-&gt;m()       bar-&gt;m()
  +foo-&gt;m(), -bar-&gt;m()    ERROR          ERROR
  +foo-&gt;m(), +bar-&gt;m()    bar-&gt;m()       bar-&gt;m()
  </code></pre>
  
  <p>(<code>protected</code> seems to behave like <code>public</code>).</p>
  
  <p>I was expecting everything to behave like it does when both are declared <code>public</code>. But although <code>foo-&gt;call()</code> and <code>bar-&gt;callbar()</code> are essentially the same thing, they yield different results depending on the visibility of <code>m()</code> in <code>foo</code> and <code>bar</code>. Why does this happen? </p>