Sobes.tech
Junior

Ce metode magice ale claselor cunoști?

sobes.tech AI

Răspuns de la AI

Metodele magice în PHP sunt metode speciale care sunt apelate automat în anumite evenimente. Încep cu __ (două underscore-uri).

Metodele magice principale:

  • __construct(): Este apelată la crearea unei noi instanțe a clasei. Folosită pentru inițializarea obiectului.
  • __destruct(): Este apelată la ștergerea unui obiect sau la finalizarea scriptului. Folosită pentru eliberarea resurselor.
  • __call(string $name, array $arguments): Este apelată când se încearcă apelarea unei metode inaccesibile sau inexistente.
  • __callStatic(string $name, array $arguments): Este apelată când se încearcă apelarea unei metode statice inaccesibile sau inexistente.
  • __get(string $name): Este apelată când se încearcă accesarea unei proprietăți inaccesibile sau inexistente.
  • __set(string $name, mixed $value): Este apelată când se încearcă setarea unei valori pentru o proprietate inaccesibilă sau inexistentă.
  • __isset(string $name): Este apelată când se folosește isset() sau empty() pe o proprietate inaccesibilă sau inexistentă.
  • __unset(string $name): Este apelată când se folosește unset() pe o proprietate inaccesibilă sau inexistentă.
  • __serialize(): Este apelată înainte de serializarea obiectului cu serialize(). Returnează un array de proprietăți pentru serializare.
  • __unserialize(array $data): Este apelată la deserializarea obiectului cu unserialize(). Primește un array de date pentru restaurarea proprietăților.
  • __toString(): Permite tratarea obiectului ca șir de caractere. Este apelată când se încearcă afișarea obiectului ca șir (de exemplu, cu echo). Trebuie să returneze un șir.
  • __invoke(...$arguments): Permite tratarea obiectului ca funcție. Este apelată când se încearcă invocarea obiectului ca funcție.
  • __set_state(array $properties): Este apelată la restaurarea obiectului cu var_export(). Primește un array de proprietăți ale obiectului.
  • __debugInfo(): Este apelată când se folosește var_dump() pe un obiect. Trebuie să returneze un array cu informații pentru depanare.

Exemplu de utilizare a __construct și __toString:

<?php
class MyClass {
    private $name;

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

    public function __toString(): string {
        return "Obiect cu numele: " . $this->name;
    }
}

$obj = new MyClass("Test");
echo $obj; // Va apela __toString()

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

$obj = new MyClass();
$obj->prop1 = "Valoare 1"; // Va apela __set()
echo $obj->prop1; // Va apela __get()