Sobes.tech
Junior

Kokius magiškus klasių metodus žinote?

sobes.tech AI

Atsakymas iš AI

Maginiai PHP metodai yra specialūs metodai, kurie automatiškai kviečiami tam tikrais įvykiais. Jie prasideda su __ (dvigubas pabraukimas).

Pagrindiniai maginiai metodai:

  • __construct(): Kviečiamas kuriant naują klasės egzempliorių. Naudojamas objekto inicializacijai.
  • __destruct(): Kviečiamas pašalinus objektą arba užbaigus skriptą. Naudojamas išteklių išlaisvinimui.
  • __call(string $name, array $arguments): Kviečiamas bandant iškviesti neprieinamą arba neegzistuojantį metodą.
  • __callStatic(string $name, array $arguments): Kviečiamas bandant iškviesti neprieinamą arba neegzistuojantį statinį metodą.
  • __get(string $name): Kviečiamas bandant gauti prieigą prie neprieinamos arba neegzistuojančios savybės.
  • __set(string $name, mixed $value): Kviečiamas bandant nustatyti reikšmę neprieinamai arba neegzistuojančiai savybei.
  • __isset(string $name): Kviečiamas, kai kviečiama isset() arba empty() šiai savybei.
  • __unset(string $name): Kviečiamas, kai kviečiama unset() šiai savybei.
  • __serialize(): Kviečiamas prieš objektą serializuojant su serialize(). Grąžina masyvą su savybėmis serializacijai.
  • __unserialize(array $data): Kviečiamas po objekto deserializavimo su unserialize(). Gaukia duomenų masyvą savybėms atkurti.
  • __toString(): Leidžia traktuoti objektą kaip eilutę. Kviečiamas bandant išvesti objektą kaip eilutę (pvz., su echo). Turi grąžinti eilutę.
  • __invoke(...$arguments): Leidžia apdoroti objektą kaip funkciją. Kviečiamas bandant iškviesti objektą kaip funkciją.
  • __set_state(array $properties): Kviečiamas atkurti objektą naudojant var_export(). Gaukia objekto savybių masyvą.
  • __debugInfo(): Kviečiamas, kai kviečiama var_dump() ant objekto. Turi grąžinti informacijos masyvą debug'ui.

Pavyzdys naudojant __construct ir __toString:

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Objektas su vardu: " . $this->name;
    }
}

$obj = new MyClass("Test");
echo $obj; // Iškvies `__toString()`

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

$obj = new MyClass();
$obj->prop1 = "Reikšmė 1"; // Kvies __set()
echo $obj->prop1; // Kvies __get()