Sobes.tech
Junior — Middle

Ar automatiškai iškvies __set() metodą, kai priskiriame reikšmę klasės objekto savybei?

sobes.tech AI

Atsakymas iš AI

„__set()“ metodas PHP automatiškai kviečiamas tik tada, kai bandote priskirti reikšmę neegzistuojančiai arba neprieinamai (pavyzdžiui, privačiai arba apsaugotai) objekto savybei. Jei savybė yra deklaruota ir prieinama, tada __set() nebus kviečiamas, ir priskyrimas įvyks tiesiogiai.

Pavyzdys:

class Example {
    private $data = [];

    public function __set($name, $value) {
        echo "__set iškviestas savybei '$name' su reikšme '$value'\n";
        $this->data[$name] = $value;
    }

    public $existingProp;
}

$obj = new Example();
$obj->existingProp = 123; // __set nebus iškviestas
$obj->newProp = 456;      // __set bus iškviestas

Šiame pavyzdyje priskyrimas $obj->existingProp = 123; vyksta tiesiogiai, o $obj->newProp = 456; iškviečia __set() metodą, nes newProp nėra deklaruota klasėje.