Sobes.tech
Junior

Ce sunt metodele magice în PHP?

sobes.tech AI

Răspuns de la AI

Metodele magice în PHP sunt metode speciale care sunt apelate automat în anumite circumstanțe. Numele lor încep cu două underscore (__).

Lista principalelor metode magice:

  • __construct(): Este apelată la crearea unui nou obiect.
  • __destruct(): Este apelată la distrugerea unui obiect.
  • __call($name, $arguments): Este apelată atunci când se încearcă apelarea unei metode inaccesibile sau inexistente a obiectului.
  • __callStatic($name, $arguments): Este apelată atunci când se încearcă apelarea unei metode statice inaccesibile sau inexistente.
  • __get($name): Este apelată atunci când se încearcă obținerea valorii unei proprietăți inaccesibile a obiectului.
  • __set($name, $value): Este apelată atunci când se încearcă setarea valorii unei proprietăți inaccesibile a obiectului.
  • __isset($name): Este apelată la utilizarea isset() sau empty() pe o proprietate inaccesibilă.
  • __unset($name): Este apelată la utilizarea unset() pe o proprietate inaccesibilă.
  • __sleep(): Este apelată înainte de serializare, returnează un array cu numele proprietăților pentru serializare.
  • __wakeup(): Este apelată după deserializare.
  • __toString(): Permite obiectului să se comporte ca un șir de caractere atunci când este utilizat într-un context de șir.
  • __invoke($args): Este apelată atunci când scriptul încearcă să apeleze obiectul ca pe o funcție.
  • __set_state(array $properties): Este apelată la exportarea obiectului cu funcția var_export().
  • __clone(): Este apelată după finalizarea clonării obiectului pentru a configura clonul.
  • __serialize(): Este apelată în timpul serializării, returnează un array de date pentru serializare.
  • __unserialize(array $data): Este apelată în timpul deserializării, primește datele din __serialize().

Exemplu de utilizare a __construct și __destruct:

<?php
class Example {
    public function __construct() {
        echo "Obiect creat\n";
    }

    public function __destruct() {
        echo "Obiect distrus\n";
    }
}

$obj = new Example();
unset($obj); // Distruge forțat obiectul
?>

Exemplu de utilizare a __get și __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; // Sau arunca o excepție
    }
}

$store = new DataStore();
$store->name = "Alice"; // Apelează __set
echo $store->name; // Apelează __get
?>