Sobes.tech
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ých názvy začínajú dvojitým podčiarknutím (__). Sú automaticky volané v určitých situáciách alebo ako reakcia na určité akcie s objektom.

Najbežnejšie magické metódy:

  • __construct(): Volá sa pri vytváraní nového objektu. Používa sa na inicializáciu vlastností objektu.
  • __destruct(): Volá sa pri zničení alebo zbere odpadu objektu. Používa sa na čistenie alebo uvoľnenie zdrojov.
  • __call($name, $arguments): Volá sa pri pokuse zavolať nedostupnú (neviditeľnú alebo neexistujúcu) metódu objektu.
  • __callStatic($name, $arguments): Volá sa pri pokuse zavolať nedostupnú statickú metódu triedy.
  • __get($name): Volá sa pri pokuse čítať nedostupnú (neviditeľnú alebo neexistujúcu) vlastnosť objektu.
  • __set($name, $value): Volá sa pri pokuse zapisovať do nedostupnej (neviditeľnej alebo neexistujúcej) vlastnosti objektu.
  • __isset($name): Volá sa pri pokuse skontrolovať existenciu nedostupnej vlastnosti pomocou isset() alebo empty().
  • __unset($name): Volá sa pri pokuse odstrániť nedostupnú vlastnosť pomocou unset().
  • __sleep(): Pripraví objekt na serializáciu. Musí vracať pole mien vlastností, ktoré budú serializované.
  • __wakeup(): Volá sa po deserializácii objektu. Používa sa na obnovenie zdrojov, ktoré mohli byť stratené počas serializácie.
  • __toString(): Umožňuje objektu určiť, ako má byť reprezentovaný ako reťazec. Volá sa pri pokuse použiť objekt v reťazcovom kontexte.
  • __invoke(...): Volá sa, keď sa objekt pokúsi použiť ako funkcia.
  • __set_state(array $properties): Volá sa pri vytváraní objektu pomocou funkcie var_export().
  • __clone(): Volá sa, keď je objekt klonovaný pomocou kľúčového slova clone. Používa sa na nastavenie klonovaného objektu.
  • __debugInfo(): Nastavuje výstup ladenia informácií pre objekt, keď je používaný s funkciami typu var_dump().

Príklad použitia __get() a __set():

<?php
class Person {
    private $data = [];

    public function __set($name, $value) {
        echo "Nastavenie vlastnosti '$name' na hodnotu '$value'";
        $this->data[$name] = $value;
    }

    public function __get($name) {
        echo "Získanie vlastnosti '$name'";
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // Alebo vyhodenie výnimky
    }
}

$person = new Person();
$person->name = "Alena"; // Vyvolá __set()
echo $person->name;     // Vyvolá __get()
?>

Magické metódy poskytujú mechanizmus na zachytenie a riadenie určitých operácií s objektmi, čo umožňuje vytvárať flexibilnejšie a dynamickejšie triedy. Avšak ich nadmerné používanie môže sťažiť čitateľnosť a ladenie kódu.