Junior
Aké magické metódy tried poznáte?
sobes.tech AI
Odpoveď od AI
Magické metódy v PHP sú špeciálne metódy, ktoré sa volajú automaticky pri určitých udalostiach. Začínajú s __ (dvojitým podčiarknutím).
Hlavné magické metódy:
__construct(): Volá sa pri vytváraní novej inštancie triedy. Používa sa na inicializáciu objektu.__destruct(): Volá sa pri odstránení objektu alebo ukončení skriptu. Používa sa na uvoľnenie zdrojov.__call(string $name, array $arguments): Volá sa pri pokuse zavolať nedostupnú alebo neexistujúcu metódu.__callStatic(string $name, array $arguments): Volá sa pri pokuse zavolať nedostupnú alebo neexistujúcu statickú metódu.__get(string $name): Volá sa pri pokuse získať prístup k nedostupnej alebo neexistujúcej vlastnosti.__set(string $name, mixed $value): Volá sa pri pokuse nastaviť hodnotu nedostupnej alebo neexistujúcej vlastnosti.__isset(string $name): Volá sa pri volaníisset()aleboempty()na nedostupnej alebo neexistujúcej vlastnosti.__unset(string $name): Volá sa pri volaníunset()na nedostupnej alebo neexistujúcej vlastnosti.__serialize(): Volá sa pred serializáciou objektu pomocouserialize(). Vráti pole vlastností na serializáciu.__unserialize(array $data): Volá sa pri deserializácii objektu pomocouunserialize(). Získa pole dát na obnovenie vlastností.__toString(): Umožňuje považovať objekt za reťazec. Volá sa pri pokuse vypísať objekt ako reťazec (napríklad pomocouecho). Musí vracať reťazec.__invoke(...$arguments): Umožňuje spracovať objekt ako funkciu. Volá sa pri pokuse zavolať objekt ako funkciu.__set_state(array $properties): Volá sa pri obnovení objektu pomocouvar_export(). Získa pole vlastností objektu.__debugInfo(): Volá sa pri volanívar_dump()na objekte. Musí vracať pole s informáciami na ladenie.
Príklad použitia __construct a __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Objekt s menom: " . $this->name;
}
}
$obj = new MyClass("Test");
echo $obj; // Zavolá __toString()
Príklad použitia __get a __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; // Alebo vyhodiť výnimku
}
}
$obj = new MyClass();
$obj->prop1 = "Hodnota 1"; // Zavolá __set()
echo $obj->prop1; // Zavolá __get()