Junior
Čo sú magické metódy v PHP?
sobes.tech AI
Odpoveď od AI
Magické metódy v PHP sú špeciálne metódy, ktoré sa automaticky volajú za určitých okolností. Ich mená začínajú dvomi podčiarknutými znakmi (__).
Zoznam hlavných magických metód:
__construct(): Volá sa pri vytvorení nového objektu.__destruct(): Volá sa pri zničení objektu.__call($name, $arguments): Volá sa pri pokuse volať nedostupnú alebo neexistujúcu metódu objektu.__callStatic($name, $arguments): Volá sa pri pokuse volať nedostupnú alebo neexistujúcu statickú metódu.__get($name): Volá sa pri pokuse získať hodnotu nedostupného vlastnosti objektu.__set($name, $value): Volá sa pri pokuse nastaviť hodnotu nedostupného vlastnosti objektu.__isset($name): Volá sa pri použitíisset()aleboempty()na nedostupnej vlastnosti.__unset($name): Volá sa pri použitíunset()na nedostupnej vlastnosti.__sleep(): Volá sa pred serializáciou, vracia pole mien vlastností na serializáciu.__wakeup(): Volá sa po deserializácii.__toString(): Umožňuje objektu správať sa ako reťazec pri použití v reťazcovom kontexte.__invoke($args): Volá sa, keď skript sa pokúša volať objekt ako funkciu.__set_state(array $properties): Volá sa pri exporte objektu funkciouvar_export().__clone(): Volá sa po dokončení klonovania objektu na nastavenie klona.__serialize(): Volá sa počas serializácie, vracia pole dát na serializáciu.__unserialize(array $data): Volá sa počas deserializácie, získava dáta z__serialize().
Príklad použitia __construct a __destruct:
<?php
class Example {
public function __construct() {
echo "Objekt vytvorený\n";
}
public function __destruct() {
echo "Objekt zničený\n";
}
}
$obj = new Example();
unset($obj); // Nútené zničenie objektu
?>
Príklad použitia __get a __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; // Alebo vyhodenie výnimky
}
}
$store = new DataStore();
$store->name = "Alice"; // Volá __set
echo $store->name; // Volá __get
?>