El concepto de visibilidad nos dice que hay tres palabras claves/reservadas: public, protected y private que anteponiendolas a cualquier método o atributo/propiedad se podrán modificar o implementar su visibilidad, haciendo posible el encapsulamiento.
Public: Se podrá acceder a ella de cualquier forma, directamente o por métodos de la misma o de otras clases. Ejemplo:
1 class Persona{ 2 public $nombre; 3 public $apellido; 4 public $edad; // Es public por lo que se accede desde 5 cualquier parte 6 public function __construct($nom, $ape, $e){ 7 $this->nombre = $nom; 8 $this->apellido= $ape; 9 $this->edad = $e; 10 } 11 public function imprimir(){ 12 return $this->edad; 13 } 14 } 15 $persona = new Persona('Pepito','Perez',24); 16 echo $persona->edad; 17 echo $persona->imprimir();
Como vemos es la misma clase persona que se viene trabajando. Creamos el objeto y hacemos echo a la edad directamente, lo que nos imprimira un 24, despues por medio del metodo imprimir() tambien nos pondra en pantalla el mismo dato, teniendo en cuenta el return en la linea 12.
Protected: Si cambiamos el public por el protected y dejamos lo demas igual, nos saldra un fatal error, ya que con protected no nos dejara acceder a la propiedad a menos que sea por métodos de la misma clase, herencia o con el parent.
1 class Persona{ 2 public $nombre; 3 public $apellido; 4 protected $edad; 5 public function __construct($nom, $ape, $e){ 6 $this->nombre = $nom; 7 $this->apellido= $ape; 8 $this->edad = $e; 9 } 10 public function imprimir(){ 11 return $this->edad; 12 } 13 } 14 $persona = new Persona('Pepito','Perez',24); 15 echo $persona->edad; 16 echo $persona->imprimir();
Si comentamos la linea donde imprimimos directamente la propiedad, nos imprimira el resultado del metodo imprimir().
1 //echo $persona->edad; 2 echo $persona->imprimir();
Private: Al poner la propiedad edad en private solo nos dejara acceder desde la misma clase, entonces si hacemos el ejercicio anterior
1 class Persona{ 2 public $nombre; 3 public $apellido; 4 private $edad; 5 public function __construct($nom, $ape, $e){ 6 $this->nombre = $nom; 7 $this->apellido= $ape; 8 $this->edad = $e; 9 } 10 public function imprimir(){ 11 return $this->edad; 12 } 13 } 14 class trabajo extends Persona{ 15 public $trabajos; 16 public $pruebas; 17 public function trabajar($job){ 18 $this->trabajos = $job; 19 } 20 public function imprimir(){ 21 return 'Mi nombre es '.$this->nombre.' '.$this-> apellido.' y tengo '.$this->edad.' Años y trabajo en '.$this->trabajos; 22 } 23 } 24 $persona = new Persona('Pepito','Perez',24); 25 echo $persona->imprimir();
Si corremos php con el siguiente código, no nos dejara acceder a la propiedad edad de la clase Persona desde trabajo porque es privada, si fuera protected si nos dejaria pero solo por metodos o parent.
Esto es encapsulamiento en PHP.
Muy bueno el tema gracias por el aporte
ResponderBorrarMuy buena Información Amigo te felicito :DDDDDD
ResponderBorrarGracias. aclaró mis dudas.
ResponderBorrarMalo
ResponderBorrarEste comentario ha sido eliminado por el autor.
BorrarSeria bueno saber porque es malo.
Borrarñonga
ResponderBorrar