Когда и почему следует использовать public, private и protected функции и переменные внутри класса? В чем разница между ними?
Примеры:
// Public
public $variable;
public function doSomething() {
  // ...
}
// Private
private $variable;
private function doSomething() {
  // ...
}
// Protected
protected $variable;
protected function doSomething() {
  // ...
}


