Sobes.tech
Junior

Τι είναι οι μαγικές μέθοδοι στο PHP;

sobes.tech AI

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

Οι μαγικές μέθοδοι στο PHP είναι ειδικές μέθοδοι που καλούνται αυτόματα υπό ορισμένες συνθήκες. Τα ονόματά τους αρχίζουν με δύο κάτω παύλες (__).

Λίστα με τις κύριες μαγικές μεθόδους:

  • __construct(): Καλείται κατά τη δημιουργία ενός νέου αντικειμένου.
  • __destruct(): Καλείται κατά την καταστροφή ενός αντικειμένου.
  • __call($name, $arguments): Καλείται όταν προσπαθείτε να καλέσετε μια μη προσβάσιμη ή μη υπάρχουσα μέθοδο του αντικειμένου.
  • __callStatic($name, $arguments): Καλείται όταν προσπαθείτε να καλέσετε μια μη προσβάσιμη ή μη υπάρχουσα στατική μέθοδο.
  • __get($name): Καλείται όταν προσπαθείτε να πάρετε την τιμή μιας μη προσβάσιμης ιδιότητας του αντικειμένου.
  • __set($name, $value): Καλείται όταν προσπαθείτε να ορίσετε την τιμή μιας μη προσβάσιμης ιδιότητας του αντικειμένου.
  • __isset($name): Καλείται κατά τη χρήση του isset() ή empty() σε μια μη προσβάσιμη ιδιότητα.
  • __unset($name): Καλείται κατά τη χρήση του unset() σε μια μη προσβάσιμη ιδιότητα.
  • __sleep(): Καλείται πριν από την σειριοποίηση, επιστρέφει έναν πίνακα με τα ονόματα των ιδιοτήτων προς σειριοποίηση.
  • __wakeup(): Καλείται μετά την αποσειριοποίηση.
  • __toString(): Επιτρέπει στο αντικείμενο να συμπεριφέρεται ως μια συμβολοσειρά κατά τη χρήση σε ένα πλαίσιο συμβολοσειράς.
  • __invoke($args): Καλείται όταν το σενάριο προσπαθεί να καλέσει το αντικείμενο ως συνάρτηση.
  • __set_state(array $properties): Καλείται κατά την εξαγωγή του αντικειμένου με τη λειτουργία var_export().
  • __clone(): Καλείται μετά την ολοκλήρωση του κλωνοποιήματος του αντικειμένου για να ρυθμίσει το αντίγραφο.
  • __serialize(): Καλείται κατά τη σειριοποίηση, επιστρέφει έναν πίνακα δεδομένων για σειριοποίηση.
  • __unserialize(array $data): Καλείται κατά τη deserialization, λαμβάνει τα δεδομένα από το __serialize().

Παραδείγματα χρήσης του __construct και __destruct:

<?php
class Example {
    public function __construct() {
        echo "Το αντικείμενο δημιουργήθηκε\n";
    }

    public function __destruct() {
        echo "Το αντικείμενο καταστράφηκε\n";
    }
}

$obj = new Example();
unset($obj); // Αναγκαστικά καταστρέφει το αντικείμενο
?>

Παραδείγματα χρήσης του __get και __set:

<?php
class DataStore {
    private $data = [];

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }

    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // Ή ρίξτε εξαίρεση
    }
}

$store = new DataStore();
$store->name = "Alice"; // Καλεί __set
echo $store->name; // Καλεί __get
?>