PHP (07) POO (03) Accesos
Hasta ahora nuestras propiedades y métodos han sido accesibles desde cualquier parte del código, por lo que no hemos tenido ningún problema a la hora de trabajar con ellos, pero en la programación orientada a objetos hay varias formas de poner restricciones, para ello vamos a utilizar varias palabras reservadas:
- Public: la opción por defecto, es visible a todo
- Private: significa accesible solo desde la misma clase
- Protected: accesible solo desde la misma clase y desde las clases derivadas.
Private
<?php class Person { private $nombre; function set_nombre($dato) { $this->nombre = $dato; } function get_nombre() { return $this->nombre; } } $persona1 = new Person; $persona1->set_nombre('Miguel'); echo '<p>Mostrando con $persona1->get_nombre: ' . $persona1->get_nombre() . '</p>'; echo '<p>Mostrando con $persona1->nombre: ' . $persona1->nombre . '</p>'; ?>
Lo cual nos da como resultado:
Mostrando con $persona1->get_nombre: Miguel
Fatal error: Cannot access private property Person::$nombre in C:\xampp\htdocs\miphp\POO\persona.php on line 20
<?php class Person { var $nombre; function set_nombre($dato) { $this->nombre = $dato; } private function get_nombre() { return $this->nombre; } } $persona1 = new Person; $persona1->set_nombre('Miguel'); echo '<p>Mostrando con $persona1->get_nombre: ' . $persona1->get_nombre() . '</p>'; echo '<p>Mostrando con $persona1->nombre: ' . $persona1->nombre . '</p>'; ?>
Este código no puede acceder al primer echo, ya que la función get_nombre es privada, mostrándonos el siguiente error:
Fatal error: Call to private method Person::get_nombre() from context » in C:\xampp\htdocs\miphp\POO\persona.php on line 19
Pero si comentamos el primer echo y lo ejecutamos, observamos que si accede al valor de la propiedad mostrando su valor.
Mostrando con $persona1->nombre: Miguel