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:

Test.php<?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ó:

Test.php<?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:

index.php<?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.