Obtención de propiedades mediante magia en POO en PHP
El siguiente método mágico que analizaremos
se llama __get. Este
método se activa al intentar leer el valor
de una propiedad privada o protegida.
Si implementamos el método __get en alguna
clase, todos los accesos a propiedades inexistentes
o ocultas serán manejados
por este método.
En este caso, PHP automáticamente pasará el nombre de la propiedad solicitada en el primer parámetro de este método, y el valor devuelto por este método será interpretado como el valor de la propiedad a la que se accedió.
Probablemente aún no esté muy claro cómo funciona esto,
así que veamos un ejemplo práctico.
Supongamos que tenemos la siguiente clase
Test con una propiedad
privada y una pública:
<?php
class Test
{
public $prop1 = 1; // propiedad pública
private $prop2 = 2; // propiedad privada
}
?>
Agreguemos a nuestra clase el método mágico
__get, que para empezar simplemente
devolverá el nombre de la propiedad a la que se accedió:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // simplemente devolvemos el nombre de la propiedad
}
}
?>
Comprobemos el funcionamiento del método mágico creado. Accedamos a tres tipos de propiedades: a una propiedad pública, a una privada y a una inexistente:
<?php
$test = new Test;
// Accedemos a la propiedad pública:
echo $test->prop1; // mostrará 1 - es decir, el valor de la propiedad
// Accedemos a la propiedad privada:
echo $test->prop2; // mostrará 'prop2' - el nombre de la propiedad
// Accedemos a la propiedad inexistente:
echo $test->prop3; // mostrará 'prop3' - el nombre de la propiedad
?>
Como pueden ver, nuestro método mágico reacciona al acceso a propiedades privadas e inexistentes, pero ignora el acceso a propiedades públicas - estas funcionan como lo hacían antes.