Sobes.tech
Junior — Middle

Czy metoda __set() będzie wywoływana automatycznie, gdy przypisujemy wartość do właściwości obiektu klasy?

sobes.tech AI

Odpowiedź od AI

Metoda __set() w PHP jest wywoływana automatycznie tylko wtedy, gdy próbujesz przypisać wartość do nieistniejącej lub niedostępnej (np. prywatnej lub chronionej) właściwości obiektu. Jeśli właściwość jest zadeklarowana i dostępna, to __set() nie zostanie wywołane, a przypisanie nastąpi bezpośrednio.

Przykład:

class Example {
    private $data = [];

    public function __set($name, $value) {
        echo "__set wywołany dla właściwości '$name' z wartością '$value'\n";
        $this->data[$name] = $value;
    }

    public $existingProp;
}

$obj = new Example();
$obj->existingProp = 123; // __set nie jest wywoływane
$obj->newProp = 456;      // __set jest wywoływane

W tym przykładzie przypisanie $obj->existingProp = 123; odbywa się bezpośrednio, natomiast $obj->newProp = 456; wywołuje metodę __set(), ponieważ newProp nie jest zadeklarowane w klasie.