Usando __unset() en PHP 7

El método mágico __unset() se activa al llamar a las construcciones del lenguaje unset() en propiedades inaccesibles. El método acepta un solo parámetro, según la siguiente sinopsis:

public bool __unset(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
class User
{
private $data = [
'name' => 'John',
'age' => 34,
];
public function __unset($name)
{
unset($this->data[$name]);
}
}
$user = new User();
var_dump($user);
unset($user->age);
unset($user->salary);
var_dump($user);

La clase User declara una única propiedad privada de matriz $data, junto con el método mágico __unset(). El método en sí es bastante simple; simplemente llama al constructor unset(), pasándole el valor en una clave de matriz dada. Estamos tratando de deshacer las propiedades $age y $salary aquí. La propiedad $salary no existe realmente, ni como propiedad de clase ni como clave de matriz de datos. Afortunadamente, unset() no arrojará un tipo de error de aviso de índice indefinido, por lo que no necesitamos verificaciones adicionales de array_key_exists(). El siguiente resultado muestra la propiedad $age que se elimina de la instancia del objeto:

object(User)#1 (1) {
["data":"User":private]=> array(2) {
["name"]=> string(4) "John"
["age"]=> int(34)
}
}
object(User)#1 (1) {
["data":"User":private]=> array(1) {
["name"]=> string(4) "John"
}
}

No debemos confundir el uso de la construcción unset() con el casting (unset). Estas dos son operaciones diferentes y, como tal, el lanzamiento (no establecido) no activará el método mágico __unset():

unset($user->age); // will trigger __unset()
((unset) $user->age); // won't trigger __unset()

Comparte