Junior
Jaké magické metody tříd znáte?
sobes.tech AI
Odpověď od AI
Magické metody v PHP jsou speciální metody, které jsou volány automaticky při určitých událostech. Začínají s __ (dvojitá podtržítka).
Hlavní magické metody:
__construct(): Volá se při vytváření nové instance třídy. Používá se k inicializaci objektu.__destruct(): Volá se při odstranění objektu nebo ukončení skriptu. Používá se k uvolnění zdrojů.__call(string $name, array $arguments): Volá se při pokusu zavolat nedostupnou nebo neexistující metodu.__callStatic(string $name, array $arguments): Volá se při pokusu zavolat nedostupnou nebo neexistující statickou metodu.__get(string $name): Volá se při pokusu získat přístup k nedostupné nebo neexistující vlastnosti.__set(string $name, mixed $value): Volá se při pokusu nastavit hodnotu nedostupné nebo neexistující vlastnosti.__isset(string $name): Volá se při voláníisset()neboempty()na nedostupné nebo neexistující vlastnosti.__unset(string $name): Volá se při voláníunset()na nedostupné nebo neexistující vlastnosti.__serialize(): Volá se před serializací objektu pomocíserialize(). Vrací pole vlastností k serializaci.__unserialize(array $data): Volá se při deserializaci objektu pomocíunserialize(). Obdrží pole dat pro obnovení vlastností.__toString(): Umožňuje považovat objekt za řetězec. Volá se při pokusu vypisovat objekt jako řetězec (například pomocíecho). Musí vracet řetězec.__invoke(...$arguments): Umožňuje zpracovávat objekt jako funkci. Volá se při pokusu zavolat objekt jako funkci.__set_state(array $properties): Volá se při obnovení objektu funkcívar_export(). Obdrží pole vlastností objektu.__debugInfo(): Volá se při volánívar_dump()na objektu. Musí vracet pole s informacemi pro ladění.
Příklad použití __construct a __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Objekt s názvem: " . $this->name;
}
}
$obj = new MyClass("Test");
echo $obj; // Zavolá __toString()
Příklad použití __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; // Nebo vyhodit výjimku
}
}
$obj = new MyClass();
$obj->prop1 = "Hodnota 1"; // Zavolá __set()
echo $obj->prop1; // Zavolá __get()