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
