Sobes.tech
Junior

Mi a mágikus módszerek a PHP-ben?

sobes.tech MI

Válasz az MI-től

A PHP mágikus módszerei speciális módszerek, amelyeket bizonyos körülmények között automatikusan meghívnak. Nevük két alsó vonallal (__) kezdődik.

A fő mágikus módszerek listája:

  • __construct(): Új objektum létrehozásakor hívódik meg.
  • __destruct(): Objektum megsemmisítésekor hívódik meg.
  • __call($name, $arguments): Híváskor, amikor egy nem elérhető vagy nem létező metódust próbálunk meghívni.
  • __callStatic($name, $arguments): Statikus metódus hívásakor, amikor nem elérhető vagy nem létező metódust próbálunk meghívni.
  • __get($name): Egy nem elérhető tulajdonság értékének lekérésekor hívódik meg.
  • __set($name, $value): Egy nem elérhető tulajdonság értékének beállításakor hívódik meg.
  • __isset($name): isset() vagy empty() használatakor nem elérhető tulajdonságon.
  • __unset($name): unset() használatakor nem elérhető tulajdonságon.
  • __sleep(): Szerializálás előtt hívódik meg, visszaad egy tömböt a szerializálandó tulajdonságnevekkel.
  • __wakeup(): Deszerializálás után hívódik meg.
  • __toString(): Lehetővé teszi, hogy az objektum stringként viselkedjen, amikor szöveges kontextusban használják.
  • __invoke($args): Híváskor, amikor az objektumot függvényként próbálják meghívni.
  • __set_state(array $properties): Az objektum exportálásakor a var_export() függvénnyel.
  • __clone(): Klónozás után hívódik meg, a klón konfigurálására.
  • __serialize(): Szerializáláskor hívódik meg, adatokat tartalmazó tömböt ad vissza.
  • __unserialize(array $data): Deszerializáláskor hívódik meg, a __serialize() által adott adatokat fogadja.

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

<?php
class Example {
    public function __construct() {
        echo "Objektum létrehozva\n";
    }

    public function __destruct() {
        echo "Objektum megsemmisítve\n";
    }
}

$obj = new Example();
unset($obj); // Kényszerített objektum megsemmisítés
?>

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

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

$store = new DataStore();
$store->name = "Alice"; // __set meghívása
echo $store->name; // __get meghívása
?>