Sobes.tech
Junior

Mis on maagilised meetodid PHP-s?

sobes.tech AI

Vastus AI-lt

PHP-s on maagilised meetodid spetsiaalsed meetodid, mida kutsutakse automaatselt esile teatud olukordades. Nende nimed algavad kahe allkriipsuga (__).

Peamiste maagiliste meetodite nimekiri:

  • __construct(): Kutsutakse, kui luuakse uus objekt.
  • __destruct(): Kutsutakse, kui objekt hävitatakse.
  • __call($name, $arguments): Kutsutakse, kui üritate kutsuda kättesaamatut või mitteolevat objekti meetodit.
  • __callStatic($name, $arguments): Kutsutakse, kui üritate kutsuda kättesaamatut või mitteolevat stati meetodit.
  • __get($name): Kutsutakse, kui üritate saada kättesaamatut objekti omadust.
  • __set($name, $value): Kutsutakse, kui üritate määrata kättesaamatut objekti omadust.
  • __isset($name): Kutsutakse, kui kasutate isset() või empty() kättesaamatule omadusele.
  • __unset($name): Kutsutakse, kui kasutate unset() kättesaamatule omadusele.
  • __sleep(): Kutsutakse enne serialiseerimist, tagastab omaduste nimede massiivi serialiseerimiseks.
  • __wakeup(): Kutsutakse pärast deserialiseerimist.
  • __toString(): Lubab objektil käituda nagu string, kui seda kasutatakse stringi kontekstis.
  • __invoke($args): Kutsutakse, kui skript üritab kutsuda objekti funktsioonina.
  • __set_state(array $properties): Kutsutakse objekti eksportimisel funktsiooniga var_export().
  • __clone(): Kutsutakse pärast objekti kloonimise lõpetamist, kloni seadistamiseks.
  • __serialize(): Kutsutakse serialiseerimise ajal, tagastab andmete massiivi serialiseerimiseks.
  • __unserialize(array $data): Kutsutakse deserialiseerimise ajal, saab andmed __serialize()-st.

Näide __construct ja __destruct kasutamisest:

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

    public function __destruct() {
        echo "Objekt hävitatud\n";
    }
}

$obj = new Example();
unset($obj); // Sunni objekti hävitamine
?>

Näide __get ja __set kasutamisest:

<?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; // Või välja visata erind
    }
}

$store = new DataStore();
$store->name = "Alice"; // Kutsub __set
echo $store->name; // Kutsub __get
?>