Bienvenidos sean a este post, hoy hablaremos sobre los modificadores de acceso.
Si bien en este post hicimos una mencion sobre los modificadores de acceso no hablamos en detalle sobre los mismos, los modificadores de acceso al igual que sucede en C son tres:
- public
- private
- protected
Los primeros dos son conocidos pero igualmente los repetiremos, el primero es que el permite que cualquier propiedad o metodo de una clase pueda ser accedida ya sea desde una instancia u objeto como desde una llamada directa citando a la clase incluyendo clases herederas de esta, la siguiente es todo lo contrario esta evita que los elementos de la clase puedan ser accedidas desde fuera de la misma, ya sean objetos o clases herederas y por supuesto llamadas directas, en cambio la ultima llamada protected es una intermedia ya que trabaja como private porque no permite que se acceda desde afuera salvo por las clases herederas de esta, es decir que nos da una restriccion a medias, para entender el concepto vamos a crear un ejemplo simple donde veremos a las tres en accion, para ello crearemos un nuevo archivo que llamaremos protegido.php y le agregaremos el siguiente codigo:
protegido.php
<?php
class maestra
{
private $mensaje = "Hola, Mundo!\n";
protected function getMensaje()
{
return $this->mensaje;
}
}
class hija extends maestra
{
function getMsn()
{
return $this->getMensaje();
}
}
$objeto = new hija();
echo $objeto->getMsn();
?>
Este es un codigo bien simple donde podemos ver como implementar a protected, especialmente, para ello tenemos dos clases pasemos a ver la primera:
class maestra
{
private $mensaje = "Hola, Mundo!\n";
protected function getMensaje()
{
return $this->mensaje;
}
}
La primera llamada maestra tendra una variable llamada mensaje de tipo private por lo tanto solo sera accesible para la clase y no podemos acceder a ella de ninguna forma pero crearemos un metodo llamado getMensaje de tipo protected, el cual nos devolvera el contenido de mensaje, pero como dijimos antes este no podra ser accedido por el objeto creado de esta clase sino por otro interno o por la segunda clase:
class hija extends maestra
{
function getMsn()
{
return $this->getMensaje();
}
}
En este caso tenemos una clase heredera de la anterior y en esta crearemos una nuevo metodo sin ningun tipo de modificador pero podemos acceder a ella por medio de un objeto creada de esta clase, en este caso devolvera el resultado devuelto por getMensaje (nuestro metodo protegido) ya que este si podra acceder por todo lo comentado anteriormente, por ultimo creamos el objeto de la segunda clase y por ultimo mostramos el resultado de la llamada a la funcion getMsn, probemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/PHP$ php protegido.php
Hola, Mundo!
tinchicus@dbn001vrt:~/lenguajes/PHP$
Como podemos ver pudimos acceder directamente, vamos a hacer una prueba para intentar llamar directamente al metodo de la clase maestra, para ello agreguen estas dos lineas despues de las clases:
$objeto2 = new maestra();
echo $objeto2->getMensaje();
En este caso crearemos un nuevo objeto pero de la clase maestra y despues llamaremos directamente al metodo interno, probemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/PHP$ php protegido.php
PHP Fatal error: Uncaught Error: Call to protected method maestra::getMensaje() from context '' in /home/tinchicus/lenguajes/PHP/protegido.php:23
Stack trace:
#0 {main}
thrown in /home/tinchicus/lenguajes/PHP/protegido.php on line 23
tinchicus@dbn001vrt:~/lenguajes/PHP$
Observen como nos dice que ocurrio un error por llamar un metodo protegido, a esto me referia con el protected dado que trabajara como privado pero a las clases herederas las considera como validas para trabajar con los elementos privados, es una forma mas flexible de poder conceder permisos pero seguir restringuiendo accesos a los elementos por medio de las instancias, con esto hemos cubierto definitivamente a los modificadores de acceso.
En resumen, hoy hemos repasado los modificadores de acceso, hemos visto el modificador que nos faltaba, hemos creado un ejemplo donde podemos ver como trabaja y realizado una pequeña modificacion para ver como es su conducta realmente, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
