Usando __get() en PHP 7

El método mágico __get () se activa al intentar leer los datos de una propiedad inaccesible. El método acepta un solo parámetro, según la siguiente sinopsis:

public mixed __get(string $name)

El argumento $name es el nombre de la propiedad con la que se interactúa.
Echemos un vistazo al siguiente ejemplo de contexto de objeto:

<?php
'Marry',
'age' => 32,
'salary' => 5300.00,
];
private $name = 'John';
protected $age = 34;
public $salary = 4200.00;
public function __get($name)
{
if (array_key_exists($name, $this->data)) {
echo '__get => ' . $name . ': ' . $this->data[$name] . PHP_EOL;
} else {
trigger_error('Undefined property: ' . $name, E_USER_NOTICE);
}
}
}
$user = new User();
echo $user->name . PHP_EOL;
echo $user->age . PHP_EOL;
echo $user->salary . PHP_EOL;
echo $user->message . PHP_EOL;

La clase User define cuatro propiedades diferentes, en tres modificadores de acceso de visibilidad diferentes. Como no tenemos métodos getter para acceder a todas las propiedades individuales, la única propiedad directamente accesible es $salary. Aquí es donde el método __get() es útil, ya que se activa tan pronto como intentamos acceder a una propiedad inexistente o inaccesible. El resultado resultante del código anterior se reduce a las siguientes cuatro líneas:

__get => name: Marry
__get => age: 32
4200
PHP Notice: Undefined property: message in…

Los valores de age y name se obtienen desde la propiedad $data como resultado del funcionamiento interno del método __get().

Comparte