Sobes.tech
Junior

Milyen mágikus osztálymódszereket ismersz?

sobes.tech MI

Válasz az MI-től

A PHP mágikus módszerei speciális módszerek, amelyeket automatikusan meghívnak bizonyos események során. Két aláhúzásjel (__) kezdődik.

Fő mágikus módszerek:

  • __construct(): Amikor példányosítunk egy osztályt, ez a módszer hívódik meg. Az objektum inicializálására szolgál.
  • __destruct(): Amikor egy objektum törlésre kerül vagy a szkript befejeződik, ez a módszer hívódik meg. Erőforrások felszabadítására használható.
  • __call(string $name, array $arguments): Híváskor, amikor egy nem elérhető vagy nem létező metódust próbálunk meghívni.
  • __callStatic(string $name, array $arguments): Statikus módszer hívásakor, amikor nem elérhető vagy nem létező statikus metódust próbálunk meghívni.
  • __get(string $name): Amikor egy nem elérhető vagy nem létező tulajdonsághoz próbálunk hozzáférni.
  • __set(string $name, mixed $value): Amikor egy nem elérhető vagy nem létező tulajdonságnak értéket próbálunk adni.
  • __isset(string $name): Amikor isset() vagy empty() függvényeket használunk egy nem elérhető vagy nem létező tulajdonságon.
  • __unset(string $name): Amikor unset()-et használunk egy nem elérhető vagy nem létező tulajdonságon.
  • __serialize(): Az objektum serializálása előtt hívódik meg a serialize()-el. Visszaad egy tömböt a serializálandó tulajdonságokról.
  • __unserialize(array $data): Deserializáláskor hívódik meg a unserialize()-el. Egy tömböt kap az adatokkal a tulajdonságok helyreállításához.
  • __toString(): Lehetővé teszi, hogy az objektumot szövegként kezeljük. Hívódik, amikor megpróbáljuk szövegként kiírni (pl. echo). Egy stringet kell visszaadnia.
  • __invoke(...$arguments): Lehetővé teszi, hogy az objektumot függvényként kezeljük. Hívódik, amikor megpróbáljuk függvényként meghívni.
  • __set_state(array $properties): A var_export()-tel történő objektum helyreállításakor hívódik meg. Egy tömböt kap az objektum tulajdonságairól.
  • __debugInfo(): Hívódik, amikor var_dump()-ot használunk egy objektumon. Egy tömböt kell visszaadnia a hibakereséshez.

Példák a __construct és __toString használatára:

<?php
class MyClass {
    private $name;

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

    public function __toString(): string {
        return "Objektum neve: " . $this->name;
    }
}

$obj = new MyClass("Teszt");
echo $obj; // Meghívja a __toString()-et

Példák a __get és __set használatára:

<?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; // Vagy kivétel dobása
    }
}

$obj = new MyClass();
$obj->prop1 = "Érték 1"; // Meghívja a __set()-et
echo $obj->prop1; // Meghívja a __get()-et