title: Private vs Protected - Visibility Good-Practice Concern
body: <p>I've been searching and I know the theoretic difference.</p>
  
  <ul>
  <li><strong>public</strong> - Any class/function may access the method/property.</li>
  <li><strong>protected</strong> - Only this class and any subclasses may access the method/property.</li>
  <li><strong>private</strong> - Only this class may access the method/property. It won't even be inherited.</li>
  </ul>
  
  <p>That's all fine and well, the question is, what's the <strong>practical</strong> difference between them? When would you use <code>private</code> and when would you use <code>protected</code>? Is there a standard or acceptable good practice over this one?</p>
  
  <p>Up until now, to retain the concept of inheritance and polymorphism, I use <code>public</code> for anything that should be accessed from the outside (like constructors and main class functionality), and <code>protected</code> for internal methods (logic, helper methods etc). Am I on the right track?</p>
  
  <p>(Note that this question is for me, but also for future reference as I haven't seen a question like this one SO).</p>