Qual é a diferença entre public, private e protected em PHP?
Olá a todos! Comecei a estudar programação orientada a objetos em PHP e não consigo entender a diferença entre os modificadores de acesso public, private e protected. Li a documentação, mas na prática ainda fico confuso.
Aqui está uma classe simples:
```php
class Car {
public $color = 'red';
private $engineStatus = 'off';
protected $fuelLevel = 100;
public function startEngine() {
$this->engineStatus = 'on';
}
private function checkFuel() {
return $this->fuelLevel > 0;
}
protected function refuel($liters) {
$this->fuelLevel += $liters;
}
}
```
Crio um objeto:
```php
$car = new Car();
echo $car->color; // Funciona
echo $car->engineStatus; // Erro!
$car->refuel(20); // Também não funciona
```
Por que não posso acessar as propriedades engineStatus e fuelLevel diretamente? E qual a diferença entre protected e private, se ambos restringem o acesso? Expliquem, por favor.