En este momento estás viendo PHP (07) POO (06) Herencias (02) Acceso protegido

PHP (07) POO (06) Herencias (02) Acceso protegido

Al utilizar la palabra reservada protected, estamos haciendo que la propiedad o método sea solo accesible desde la propia clase y de sus herederas, de modo que no se puede acceder desde el resto del código.

En el siguiente ejemplo vemos como funciona esto:

class Person
 {
  var $nombre;
  var $edad;

  //Aquí comienzan los geters y seters de las propiedades.
  protected function set_nombre($dato)
  {
   $this->nombre = $dato;
  }

  function get_nombre()
  {
   return $this->nombre;
  }

  function set_edad($dato)
  {
   $this->edad = $dato;
  }

  function get_edad()
  {
   return $this->edad;
  }
 }

Esto hace imposible acceder al método set_nombre si no es desde la propia clase Person o de sus herederas, por lo que no podemos acceder a ella de la forma habitual:

$persona1->set_nombre('Antonio');

Para poder acceder a ella se debe de hacer desde su heredera, creando un método que permita llamar al protegido y pasarle el valor como vemos en el siguiente ejemplo completo:

<?php
 class Person
 {
  var $nombre;
  var $edad;

  //Aquí comienzan los geters y seters de las propiedades.
  protected function set_nombre($dato)
  {
   $this->nombre = $dato;
  }

  function get_nombre()
  {
   return $this->nombre;
  }

  function set_edad($dato)
  {
   $this->edad = $dato;
  }

  function get_edad()
  {
   return $this->edad;
  }
 }

 class Ciudad extends Person
 {
  var $ciudad;

  function set_ciudad($dato)
  {
   $this->ciudad = $dato;
  }

  function get_ciudad()
  {
   return $this->ciudad;
  }

  function set_nombre_publico($dato)
  {
   $this->set_nombre($dato);
  }
 }

 $persona1 = new Ciudad;
 $persona1->set_nombre_publico('Antonio');
 $persona1->set_edad('23');
 $persona1->set_ciudad('Zaragoza');

 echo '<p>Mostrando nombre con $persona1->get_nombre: ' . $persona1->get_nombre() . '</p>';
 echo '<p>Mostrando edad con $persona1->get_edad: ' . $persona1->get_edad() . '</p>';
 echo '<p>Mostrando ciudad con $persona1->get_ciudad: ' . $persona1->get_ciudad() . '</p>';
?>

Aquí vemos como en la clase Ciudad se llama traves de la función set_nombre_publico a la función set_nombre que está protegida, de modo que al introducir el nombre de la persona se accede por medio de set_nombre_publico.

De este modo se obtiene el resultado deseado:

Mostrando nombre con $persona1->get_nombre: Antonio

Mostrando edad con $persona1->get_edad: 23

Mostrando ciudad con $persona1->get_ciudad: Zaragoza

Deja una respuesta

Responsable » Miguel Ángel López Torralba
Finalidad » Contactar conmigo y enviarte mi contenido.
Legitimación » Tu consentimiento.
Destinatario » MailChimp, mi proveedor de email marketing, que está acogido al acuerdo de seguridad EU-US Privacy.
Derechos » Acceder, rectificar, limitar o suprimir tus datos cuando quieras.