Junior
Que métodos mágicos de classes conhece?
sobes.tech IA
Resposta da IA
Os métodos mágicos em PHP são métodos especiais que são chamados automaticamente em eventos específicos. Começam com __ (duplo sublinhado).
Principais métodos mágicos:
__construct(): É chamado ao criar uma nova instância da classe. Usado para inicializar o objeto.__destruct(): É chamado ao remover um objeto ou ao terminar o script. Usado para liberar recursos.__call(string $name, array $arguments): É chamado ao tentar invocar um método inacessível ou inexistente.__callStatic(string $name, array $arguments): É chamado ao tentar invocar um método estático inacessível ou inexistente.__get(string $name): É chamado ao tentar aceder a uma propriedade inacessível ou inexistente.__set(string $name, mixed $value): É chamado ao tentar definir um valor para uma propriedade inacessível ou inexistente.__isset(string $name): É chamado ao usarisset()ouempty()numa propriedade inacessível ou inexistente.__unset(string $name): É chamado ao usarunset()numa propriedade inacessível ou inexistente.__serialize(): É chamado antes de serializar o objeto comserialize(). Retorna um array de propriedades para serialização.__unserialize(array $data): É chamado ao deserializar o objeto comunserialize(). Recebe um array de dados para restaurar as propriedades.__toString(): Permite tratar o objeto como uma string. É chamado ao tentar imprimir o objeto como string (por exemplo, comecho). Deve retornar uma string.__invoke(...$arguments): Permite tratar o objeto como uma função. É chamado ao tentar invocar o objeto como uma função.__set_state(array $properties): É chamado ao restaurar o objeto comvar_export(). Recebe um array de propriedades do objeto.__debugInfo(): É chamado ao usarvar_dump()num objeto. Deve retornar um array com informações para depuração.
Exemplo de uso de __construct e __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Objeto com nome: " . $this->name;
}
}
$obj = new MyClass("Teste");
echo $obj; // Vai chamar __toString()
Exemplo de uso de __get e __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; // Ou lançar uma exceção
}
}
$obj = new MyClass();
$obj->prop1 = "Valor 1"; // Vai chamar __set()
echo $obj->prop1; // Vai chamar __get()