Sobes.tech
Junior

¿Qué métodos mágicos de clases conoces?

sobes.tech AI

Respuesta de la IA

Los métodos mágicos en PHP son métodos especiales que se llaman automáticamente en eventos específicos. Comienzan con __ (doble guion bajo).

Métodos mágicos principales:

  • __construct(): Se llama al crear una nueva instancia de la clase. Se usa para inicializar el objeto.
  • __destruct(): Se llama al eliminar un objeto o al finalizar el script. Se usa para liberar recursos.
  • __call(string $name, array $arguments): Se llama al intentar invocar un método inaccesible o inexistente.
  • __callStatic(string $name, array $arguments): Se llama al intentar invocar un método estático inaccesible o inexistente.
  • __get(string $name): Se llama al intentar acceder a una propiedad inaccesible o inexistente.
  • __set(string $name, mixed $value): Se llama al intentar establecer un valor a una propiedad inaccesible o inexistente.
  • __isset(string $name): Se llama al usar isset() o empty() en una propiedad inaccesible o inexistente.
  • __unset(string $name): Se llama al usar unset() en una propiedad inaccesible o inexistente.
  • __serialize(): Se llama antes de serializar el objeto con serialize(). Devuelve un array de propiedades para la serialización.
  • __unserialize(array $data): Se llama al deserializar el objeto con unserialize(). Recibe un array de datos para restaurar las propiedades.
  • __toString(): Permite tratar el objeto como una cadena. Se llama al intentar imprimir el objeto como cadena (por ejemplo, con echo). Debe devolver una cadena.
  • __invoke(...$arguments): Permite tratar el objeto como una función. Se llama al intentar invocar el objeto como función.
  • __set_state(array $properties): Se llama al restaurar el objeto con var_export(). Recibe un array de propiedades del objeto.
  • __debugInfo(): Se llama al usar var_dump() en un objeto. Debe devolver un array con información para depuración.

Ejemplo de uso de __construct y __toString:

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Objeto con nombre: " . $this->name;
    }
}

$obj = new MyClass("Prueba");
echo $obj; // Llamará a __toString()

Ejemplo de uso de __get y __set:

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

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

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

$obj = new MyClass();
$obj->prop1 = "Valor 1"; // Llamará a __set()
echo $obj->prop1; // Llamará a __get()