Sobes.tech
Junior — Middle

Será chamado automaticamente o método __set() quando atribuirmos um valor a uma propriedade de um objeto da classe?

sobes.tech IA

Resposta da IA

O método __set() em PHP é chamado automaticamente apenas se estiver a tentar atribuir um valor a uma propriedade que não existe ou que não é acessível (por exemplo, privada ou protegida) do objeto. Se a propriedade estiver declarada e acessível, então __set() não será chamado e a atribuição ocorrerá diretamente.

Exemplo:

class Example {
    private $data = [];

    public function __set($name, $value) {
        echo "__set chamado para a propriedade '$name' com o valor '$value'\n";
        $this->data[$name] = $value;
    }

    public $existingProp;
}

$obj = new Example();
$obj->existingProp = 123; // __set não é chamado
$obj->newProp = 456;      // __set é chamado

Neste exemplo, a atribuição $obj->existingProp = 123; ocorre diretamente, enquanto $obj->newProp = 456; chama o método __set(), pois newProp não está declarado na classe.