Sobes.tech
Junior — Middle

Se va apela automat metoda __set() atunci când atribuim o valoare unei proprietăți a unui obiect de clasă?

sobes.tech AI

Răspuns de la AI

Metoda __set() în PHP este apelată automat numai dacă încercați să atribuiți o valoare unei proprietăți inexistentă sau inaccesibilă (de exemplu, privată sau protejată) a obiectului. Dacă proprietatea este declarată și accesibilă, atunci __set() nu va fi apelată, iar atribuirea va avea loc direct.

Exemplu:

class Example {
    private $data = [];

    public function __set($name, $value) {
        echo "__set apelat pentru proprietatea '$name' cu valoarea '$value'\n";
        $this->data[$name] = $value;
    }

    public $existingProp;
}

$obj = new Example();
$obj->existingProp = 123; // __set nu este apelat
$obj->newProp = 456;      // __set este apelat

În acest exemplu, atribuirea $obj->existingProp = 123; se face direct, în timp ce $obj->newProp = 456; apelează metoda __set(), deoarece newProp nu este declarat în clasă.