Sobes.tech
Junior

¿Qué son los métodos mágicos en PHP?

sobes.tech AI

Respuesta de la IA

Los métodos mágicos en PHP son métodos especiales que se llaman automáticamente en ciertas circunstancias. Sus nombres comienzan con dos guiones bajos (__).

Lista de los métodos mágicos principales:

  • __construct(): Se llama al crear un nuevo objeto.
  • __destruct(): Se llama al destruir un objeto.
  • __call($name, $arguments): Se llama al intentar invocar un método del objeto que no está accesible o no existe.
  • __callStatic($name, $arguments): Se llama al intentar invocar un método estático que no está accesible o no existe.
  • __get($name): Se llama al intentar obtener el valor de una propiedad inaccesible del objeto.
  • __set($name, $value): Se llama al intentar establecer el valor de una propiedad inaccesible del objeto.
  • __isset($name): Se llama al usar isset() o empty() en una propiedad inaccesible.
  • __unset($name): Se llama al usar unset() en una propiedad inaccesible.
  • __sleep(): Se llama antes de la serialización, devuelve un array con los nombres de las propiedades a serializar.
  • __wakeup(): Se llama después de la deserialización.
  • __toString(): Permite que el objeto se comporte como una cadena cuando se usa en un contexto de cadena.
  • __invoke($args): Se llama cuando el script intenta invocar el objeto como una función.
  • __set_state(array $properties): Se llama al exportar un objeto con la función var_export().
  • __clone(): Se llama después de completar la clonación del objeto para configurar la copia.
  • __serialize(): Se llama durante la serialización, devuelve un array de datos para serializar.
  • __unserialize(array $data): Se llama durante la deserialización, recibe los datos de __serialize().

Ejemplo de uso de __construct y __destruct:

<?php
class Example {
    public function __construct() {
        echo "Objeto creado\n";
    }

    public function __destruct() {
        echo "Objeto destruido\n";
    }
}

$obj = new Example();
unset($obj); // Destruye el objeto de forma forzada
?>

Ejemplo de uso de __get y __set:

<?php
class DataStore {
    private $data = [];

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }

    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // O lanzar una excepción
    }
}

$store = new DataStore();
$store->name = "Alice"; // Llama a __set
echo $store->name; // Llama a __get
?>