title: Visibility of __construct
body: <p>If I have:</p>
  
  <pre><code>abstract class AbstractSingleton
  {
      protected static $instance;
  
      public static function &amp; getInstance()
      {
          if(null === static::$instance) static::$instance = new static();
          return static::$instance;
      }
  
      protected function __construct() { }
  }
  </code></pre>
  
  <p>Can a user who extends the class redefine the visibility of <code>__construct</code>?</p>
  
  <pre><code>class Singleton extends AbstractSingleton
  {
      public function __construct() { } // That would be a problem
  }
  </code></pre>
  
  <p>And second question, what happens for subclasses if <code>__construct</code> is defined as private in AbstractSingleton? Is there not constructor at all? Is a new default constructor provided to the class, and if yes, with what visibility?</p>