Visibilidad de atributos y métodos (public, protected y private).
En una clase podemos definir nuestros atributos y métodos como públicos, protegidos o privados (public, protected o private) en función de la visibilidad que queremos que tengan en el resto del código. En artículos anteriores solo utilizamos atributos y métodos públicos.
Veamos las diferencias entre public, protected y private:
- Public: podemos acceder a las propiedades y métodos desde cualquier lugar, desde la clase actual, clases que heredan de la clase actual y desde otras clases.
- Protected: se puede acceder al atributo o método desde la clase que lo define y desde cualquier otra que herede de esta clase.
- Private: los atributos o métodos solo son accesibles desde la clase que los define.
Podemos ver un ejemplo de esto en la clase Coche:
<?php // Definimos la clase class Coche{ /* Atributos protected accesibles en clases que hereden de esta */ protected $modelo; protected $color; protected $velocidad; /* Constructor, siempre tiene que ser publico */ public function __construct($modelo, $color, $velocidad = 0){ $this->modelo = $modelo; $this->color = $color; $this->velocidad = $velocidad; } /* Métodos privados solo se pueden llamar dentro esta clase */ private function getColor(){ return $this->color; } private function setColor($color){ $this->color = $color; } private function acelerar(){ $this->velocidad++; } private function frenar(){ $this->velocidad--; } private function getVelocidad(){ return $this->velocidad; } public function mostrarInfo(){ // Llamamos a otros métodos $info = "<h1>Información del coche:</h1>"; $info.= "Modelo: ".$this->modelo; $info.= "<br/> Color: ".$this->getColor(); $info.= "<br/> Velocidad: ".$this->getVelocidad(); return $info; } } ?>
Una vez que creemos el objeto coche solo podremos llamar al método mostrarInfo, el resto de métodos son internos de esa clase porque son privados. Si intentáramos llamar al método getVelocidad por ejemplo, php nos lanzará una error.