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:
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:
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:
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
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
No hay comentarios:
Publicar un comentario