PHP Altruisas Ocio Eventos Cursos Las Palmas
/

El uso de Protected en la declaración de un método o atributo de una clase en PHP

Esta característica hace referencia a la visibilidad del método o atributo y se define en el momento de crear una clase. El significado es similar a utilizar private (solo visible desde el código de la clase), pero con la salvedad de que si se utiliza protected se puede acceder desde la propia clase y desde una clase hija de ésta. En definitiva, estamos dando visibilidad para que una clase hija pueda utilizar, atributo o método, en el código de creación de la subclase.

Ejemplo: clase madre: Animal, clase hija: Pez


1.- Fichero: Animal.class.php

<?php
class Animal {
      // Declaración de atributos
     private $color = "gris";
     private $peso = 10;
     // definición de los métodos
     public function getColor (){
       return $this->color;
     }
     public function setColor ($color){
       $this->color = $color;
     }
     public function getPeso (){
       return $this->peso;
     }
     public function setPeso ($peso){
        $this->peso = $peso;
     }
     public function anadir_un_kilo() { 
       $this->peso = $this->peso + 1; 
     }
     public function comer(){
       echo "Ñam ñam.<br>";
     }
     public function moverse (){
       echo "caminar dos metros hacia adelante.<br>";
     }
}//fin declaración de la clase
?>

2.- Fichero: Pez.class.php


<?php
 class Pez extends Animal {
    private $vive_en_el_mar; //tipo de pez
    //accesos
    public function getTipo () {
        if ($this->vive_en_el_mar){
        return"vive_en_el_mar";
        }else if ($this->vive_en_el_mar === falso){
           return "no_vive_en_el_mar";
        }else {
            return"";
        }
     }
   public function setTipo ($vive_en_el_mar){
      $this->vive_en_el_mar = $vive_en_el_mar;
   }
   //método
   public function nadar (){
   echo "Nado <br>";
   }
}?>

Con objeto de estudiar la visibilidad protegida, se añade el atributo $edad con visibilidad protegida (protected) a la clase Animal.

      // Declaración de atributos
     private $color = "gris";
     private $peso = 10;
     protected $edad = 0;
     // definición de los métodos
     [...], etc
?>

En la clase Pez crearemos un método llamado llamarAtributos ()


 public function llamarAtributos (){
    echo "Tipo : ".$this->vive_en_el_mar; // atributo privado de la clase Pez, correcto
    echo "<br>";
    echo "Edad: ".$this->edad; //atributo protegido en la clase madre, correcto
    echo "<br>";
    echo "Peso: ".$this->peso; //atributo privado en la clase madre, error. Debe pasar
    //por sus métodos públicos para leer o modificar el valor
    echo "<br>";
 }

La página de uso de las clases: uso.protected.php

<?php
   //cargar las clases
   include ('class/Animal.class.php');
   include ('class/Pez.class.php');
   //instanciar la clase Pez que llama al constructor
   //de la clase animal
   $pez = newPez ("gris", 8);
   //leer el peso con el acceso de la clase madre
   echo"El peso del pez es : ".$pez->getPeso()." kilos.<br>";
   //actualizar el tipo de pez
   $pez->setTipo(true);
   //llamada al método mostrando los atributos de la clase Pez
   //y Animal
   $pez->llamarAtributos();
?>

Ejecución del código del fichero de uso. Como puede observarse al ejecutar el código, el atributo $Peso no está accesible desde la subclase (clase hija) Pez, y esto es debido a que está declarada como privada. La recomendación es que si se quiere tener acceso desde las clases hijas deben declararse como protegidos (protected).

Deja una respuesta

Your email address will not be published.

PHP Altruistas Ocio en Las Palmas
Anterior post

La Herencia en la Programación Orientada a Objetos (POO)

Siguiente post

La integración de javaScript con HTML

Latest from PHP