Sobes.tech
Junior

Ποιες μαγικές μεθόδους κλάσεων γνωρίζετε;

sobes.tech AI

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

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

Οι κύριες μαγικές μέθοδοι:

  • __construct(): Καλείται κατά τη δημιουργία μιας νέας στιγμιότυπου της κλάσης. Χρησιμοποιείται για την αρχικοποίηση του αντικειμένου.
  • __destruct(): Καλείται κατά τη διαγραφή ενός αντικειμένου ή το τέλος του σεναρίου. Χρησιμοποιείται για την απελευθέρωση πόρων.
  • __call(string $name, array $arguments): Καλείται κατά την προσπάθεια κλήσης μιας μη προσβάσιμης ή μη υπάρχουσας μεθόδου.
  • __callStatic(string $name, array $arguments): Καλείται κατά την προσπάθεια κλήσης μιας μη προσβάσιμης ή μη υπάρχουσας στατικής μεθόδου.
  • __get(string $name): Καλείται κατά την προσπάθεια πρόσβασης σε μια μη προσβάσιμη ή μη υπάρχουσα ιδιότητα.
  • __set(string $name, mixed $value): Καλείται κατά την προσπάθεια ορισμού τιμής σε μια μη προσβάσιμη ή μη υπάρχουσα ιδιότητα.
  • __isset(string $name): Καλείται κατά την χρήση isset() ή empty() σε μια μη προσβάσιμη ή μη υπάρχουσα ιδιότητα.
  • __unset(string $name): Καλείται κατά την χρήση unset() σε μια μη προσβάσιμη ή μη υπάρχουσα ιδιότητα.
  • __serialize(): Καλείται πριν από την σειριοποίηση του αντικειμένου με serialize(). Επιστρέφει έναν πίνακα ιδιοτήτων για σειριοποίηση.
  • __unserialize(array $data): Καλείται κατά την αποσειριοποίηση του αντικειμένου με unserialize(). Λαμβάνει έναν πίνακα δεδομένων για την αποκατάσταση των ιδιοτήτων.
  • __toString(): Επιτρέπει την αντιμετώπιση του αντικειμένου ως συμβολοσειρά. Καλείται κατά την προσπάθεια εκτύπωσης του αντικειμένου ως συμβολοσειρά (π.χ., με echo). Πρέπει να επιστρέφει μια συμβολοσειρά.
  • __invoke(...$arguments): Επιτρέπει την αντιμετώπιση του αντικειμένου ως συνάρτηση. Καλείται κατά την προσπάθεια κλήσης του αντικειμένου ως συνάρτηση.
  • __set_state(array $properties): Καλείται κατά την αποκατάσταση του αντικειμένου με var_export(). Λαμβάνει έναν πίνακα ιδιοτήτων του αντικειμένου.
  • __debugInfo(): Καλείται κατά την χρήση var_dump() σε ένα αντικείμενο. Πρέπει να επιστρέφει έναν πίνακα με πληροφορίες για αποσφαλμάτωση.

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

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Αντικείμενο με όνομα: " . $this->name;
    }
}

$obj = new MyClass("Δοκιμή");
echo $obj; // Θα καλέσει το __toString()

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

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

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

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

$obj = new MyClass();
$obj->prop1 = "Τιμή 1"; // Θα καλέσει το __set()
echo $obj->prop1; // Θα καλέσει το __get()