¿Cuál es la diferencia entre public, private y protected en PHP?
¡Hola a todos! Acabo de empezar a aprender programación orientada a objetos en PHP y no puedo entender la diferencia entre los modificadores de acceso public, private y protected. Parece que leí la documentación, pero en la práctica todavía me confundo.
Aquí tengo una clase simple:
```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;
}
}
```
Creo un objeto:
```php
$car = new Car();
echo $car->color; // Funciona
echo $car->engineStatus; // ¡Error!
$car->refuel(20); // Tampoco funciona
```
¿Por qué no puedo acceder directamente a las propiedades engineStatus y fuelLevel? ¿Y cuál es la diferencia entre protected y private, si ambos restringen el acceso? Explíquenme por favor.