公共,私有和受保护的有什么区别?

什么时候以及为什么应该在类中使用publicprivateprotected函数和变量?它们之间有什么区别?

例子:

// Public
public $variable;
public function doSomething() {
  // ...
}

// Private
private $variable;
private function doSomething() {
  // ...
}

// Protected
protected $variable;
protected function doSomething() {
  // ...
}

答案