Sobes.tech
Junior — Middle

Θα καλείται αυτόματα η μέθοδος __set() όταν αναθέτουμε μια τιμή σε μια ιδιότητα ενός αντικειμένου της κλάσης;

sobes.tech AI

Απάντηση από AI

Η μέθοδος __set() στο PHP καλείται αυτόματα μόνο στην περίπτωση που προσπαθείτε να αναθέσετε μια τιμή σε μια ιδιότητα που δεν υπάρχει ή δεν είναι προσβάσιμη (π.χ., ιδιωτική ή προστατευμένη) του αντικειμένου. Αν η ιδιότητα έχει δηλωθεί και είναι προσβάσιμη, τότε το __set() δεν θα κληθεί και η ανάθεση θα γίνει απευθείας.

Παράδειγμα:

class Example {
    private $data = [];

    public function __set($name, $value) {
        echo "__set καλείται για την ιδιότητα '$name' με την τιμή '$value'\n";
        $this->data[$name] = $value;
    }

    public $existingProp;
}

$obj = new Example();
$obj->existingProp = 123; // __set δεν καλείται
$obj->newProp = 456;      // __set καλείται

Σε αυτό το παράδειγμα, η ανάθεση $obj->existingProp = 123; γίνεται απευθείας, ενώ $obj->newProp = 456; καλεί τη μέθοδο __set(), επειδή το newProp δεν έχει δηλωθεί στην κλάση.