Sobes.tech
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() alebo empty() 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 pomocou serialize(). Vráti pole vlastností na serializáciu.
  • __unserialize(array $data): Volá sa pri deserializácii objektu pomocou unserialize(). 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 pomocou echo). 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 pomocou var_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()