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