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șteisset()sauempty()pe o proprietate inaccesibilă sau inexistentă.__unset(string $name): Este apelată când se foloseșteunset()pe o proprietate inaccesibilă sau inexistentă.__serialize(): Este apelată înainte de serializarea obiectului cuserialize(). Returnează un array de proprietăți pentru serializare.__unserialize(array $data): Este apelată la deserializarea obiectului cuunserialize(). 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, cuecho). 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 cuvar_export(). Primește un array de proprietăți ale obiectului.__debugInfo(): Este apelată când se foloseștevar_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()