Usando __set() en PHP 7

Además de la sobrecarga de métodos, la sobrecarga de propiedades es otro aspecto de las capacidades de sobrecarga de PHP. Hay cuatro métodos mágicos en PHP que admiten la sobrecarga de propiedades:
__set(), __get(), __isset() y __unset(). A lo largo de esta sección, veremos más de cerca el método __set().
El método mágico __set() se activa al intentar escribir datos en propiedades inaccesibles.

El método acepta dos parámetros, según la siguiente sinopsis:

public void __set(string $name, mixed $value)

Mientras que los parámetros del método __set() tienen el siguiente significado:

  • $name: Este es el nombre de la propiedad con la que interactúa
  • $value: este es el valor que la propiedad $name debe establecerse

Echemos un vistazo al siguiente ejemplo de contexto de objeto:

<?php
class User
{
private $data = array();
private $name;
protected $age;
public $salary;
public function __set($name, $value)
{
$this->data[$name] = $value;
}
}
$user = new User();
$user->name = 'John';
$user->age = 34;
$user->salary = 4200.00;
$user->message = 'hello';
var_dump($user);

La clase User declara cuatro propiedades con varios modificadores de acceso. Además declara el método __set() que intercepta todos los intentos de escritura de propiedad en el contexto del objeto.
Intentar establecer una propiedad no existente ($message) o inaccesible ($name, $age) activa el método __set(). El funcionamiento interno del método __set() empuja los datos inaccesibles a la matriz de propiedades $data, que es visible en el siguiente resultado:

object(User)#1 (4) {
["data":"User":private]=> array(3) {
["name"]=> string(4) "John"
["age"]=> int(34)
["message"]=> string(5) "hello"
}
["name":"User":private]=> NULL
["age":protected]=> NULL
["salary"]=> float(4200)
}

Un uso práctico del método __set() podría ser permitir el establecimiento de una propiedad si algunos parámetros permiten modificaciones y se establecieron en verdadero durante la construcción del objeto; de lo contrario, lanzar una excepción.
Intentar utilizar cualquiera de los cuatro métodos de sobrecarga de propiedades (__set(), __get(), __isset() y __unset()) en un contexto estático daría como resultado el siguiente error:

PHP Warning: The magic method __set() must have public visibility and
cannot be static…

Comparte