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 usarisset()oempty()en una propiedad inaccesible o inexistente.__unset(string $name): Se llama al usarunset()en una propiedad inaccesible o inexistente.__serialize(): Se llama antes de serializar el objeto conserialize(). Devuelve un array de propiedades para la serialización.__unserialize(array $data): Se llama al deserializar el objeto conunserialize(). 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, conecho). 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 convar_export(). Recibe un array de propiedades del objeto.__debugInfo(): Se llama al usarvar_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()