Junior
O que são métodos mágicos em PHP?
sobes.tech IA
Resposta da IA
Os métodos mágicos em PHP são métodos especiais que são chamados automaticamente em certas circunstâncias. Os seus nomes começam com dois underlines (__).
Lista dos principais métodos mágicos:
__construct(): É chamado ao criar um novo objeto.__destruct(): É chamado ao destruir um objeto.__call($name, $arguments): É chamado ao tentar invocar um método do objeto que não está acessível ou não existe.__callStatic($name, $arguments): É chamado ao tentar invocar um método estático que não está acessível ou não existe.__get($name): É chamado ao tentar obter o valor de uma propriedade inacessível do objeto.__set($name, $value): É chamado ao tentar definir o valor de uma propriedade inacessível do objeto.__isset($name): É chamado ao usarisset()ouempty()numa propriedade inacessível.__unset($name): É chamado ao usarunset()numa propriedade inacessível.__sleep(): É chamado antes da serialização, devolve um array com os nomes das propriedades a serializar.__wakeup(): É chamado após a deserialização.__toString(): Permite que o objeto se comporte como uma string quando usado num contexto de string.__invoke($args): É chamado quando o script tenta invocar o objeto como uma função.__set_state(array $properties): É chamado ao exportar um objeto com a funçãovar_export().__clone(): É chamado após a clonagem do objeto para configurar a cópia.__serialize(): É chamado durante a serialização, devolve um array de dados para serializar.__unserialize(array $data): É chamado durante a deserialização, recebe os dados de__serialize().
Exemplo de uso de __construct e __destruct:
<?php
class Example {
public function __construct() {
echo "Objeto criado\n";
}
public function __destruct() {
echo "Objeto destruído\n";
}
}
$obj = new Example();
unset($obj); // Destrói o objeto de forma forçada
?>
Exemplo de uso de __get e __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; // Ou lançar uma exceção
}
}
$store = new DataStore();
$store->name = "Alice"; // Chama __set
echo $store->name; // Chama __get
?>