Sobes.tech
Junior

Kas yra magiški metodai PHP?

sobes.tech AI

Atsakymas iš AI

Maginiai metodai PHP yra specialūs metodai, kurie automatiškai kviečiami tam tikromis aplinkybėmis. Jų pavadinimai prasideda dviem pabraukimais (__).

Pagrindinių maginių metodų sąrašas:

  • __construct(): Kviečiamas kuriant naują objektą.
  • __destruct(): Kviečiamas sunaikinus objektą.
  • __call($name, $arguments): Kviečiamas bandant iškviesti neprieinamą arba neegzistuojantį objekto metodą.
  • __callStatic($name, $arguments): Kviečiamas bandant iškviesti neprieinamą arba neegzistuojantį statinį metodą.
  • __get($name): Kviečiamas bandant gauti neprieinamą objekto savybę.
  • __set($name, $value): Kviečiamas bandant nustatyti neprieinamą objekto savybę.
  • __isset($name): Kviečiamas naudojant isset() arba empty() neprieinamos savybės atveju.
  • __unset($name): Kviečiamas naudojant unset() neprieinamos savybės atveju.
  • __sleep(): Kviečiamas prieš serializaciją, grąžina savybių pavadinimų masyvą serializacijai.
  • __wakeup(): Kviečiamas po deserializacijos.
  • __toString(): Leidžia objektui elgtis kaip eilutė naudojant kaip eilutės kontekste.
  • __invoke($args): Kviečiamas, kai skriptas bando iškviesti objektą kaip funkciją.
  • __set_state(array $properties): Kviečiamas eksportuojant objektą var_export() funkcija.
  • __clone(): Kviečiamas po objekto klonavimo pabaigos, skirtas klono konfigūravimui.
  • __serialize(): Kviečiamas serializacijos metu, grąžina duomenų masyvą serializacijai.
  • __unserialize(array $data): Kviečiamas deserializacijos metu, gauna duomenis iš __serialize().

Pavyzdys naudojant __construct ir __destruct:

<?php
class Example {
    public function __construct() {
        echo "Objektas sukurtas\n";
    }

    public function __destruct() {
        echo "Objektas sunaikintas\n";
    }
}

$obj = new Example();
unset($obj); // Priverstinis sunaikinimas
?>

Pavyzdys naudojant __get ir __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; // Arba išmesti išimtį
    }
}

$store = new DataStore();
$store->name = "Alice"; // Iškviečia __set
echo $store->name; // Iškviečia __get
?>