Sobes.tech
Junior

Milliseid klassi maagilisi meetodeid te tead?

sobes.tech AI

Vastus AI-lt

PHP-s on maagilised meetodid spetsiaalsed meetodid, mis kutsutakse automaatselt teatud sündmustel. Nad algavad __ (kahe alljoonega).

Peamised maagilised meetodid:

  • __construct(): Kutsutakse, kui luuakse uus klassi eksemplar. Kasutatakse objekti initsialiseerimiseks.
  • __destruct(): Kutsutakse, kui objekt kustutatakse või skript lõpeb. Kasutatakse ressursside vabastamiseks.
  • __call(string $name, array $arguments): Kutsutakse, kui proovite kutsuda kättesaamatut või mitteolevat meetodit.
  • __callStatic(string $name, array $arguments): Kutsutakse, kui proovite kutsuda kättesaamatut või mitteolevat staatilist meetodit.
  • __get(string $name): Kutsutakse, kui proovite pääseda ligi kättesaamatule või mitteolevale omadusele.
  • __set(string $name, mixed $value): Kutsutakse, kui proovite määrata väärtust kättesaamatule või mitteolevale omadusele.
  • __isset(string $name): Kutsutakse, kui kutsutakse isset() või empty() selle omaduse jaoks.
  • __unset(string $name): Kutsutakse, kui kutsutakse unset() selle omaduse jaoks.
  • __serialize(): Kutsutakse enne objekti serialiseerimist serialize() abil. Tagastab massiivi omadustest serialiseerimiseks.
  • __unserialize(array $data): Kutsutakse pärast objekti deserialiseerimist unserialize() abil. Saab massiivi andmeid omaduste taastamiseks.
  • __toString(): Võimaldab käsitleda objekti kui stringi. Kutsutakse, kui proovite objekti välja printida või kasutada stringina (näiteks echo). Peab tagastama stringi.
  • __invoke(...$arguments): Võimaldab töödelda objekti kui funktsiooni. Kutsutakse, kui proovite objekti kui funktsiooni kutsuda.
  • __set_state(array $properties): Kutsutakse, kui taastate objekti var_export() abil. Saab massiivi omadustest.
  • __debugInfo(): Kutsutakse, kui teete var_dump() objekti kohta. Peab tagastama info massiivi silumiseks.

Näide kasutades __construct ja __toString:

<?php
class MyClass {
    private $name;

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

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

$obj = new MyClass("Test");
echo $obj; // Kutsutakse `__toString()`

Näide kasutades __get ja __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; // Või erind
    }
}

$obj = new MyClass();
$obj->prop1 = "Väärtus 1"; // Kutsutakse `__set()`
echo $obj->prop1; // Kutsutakse `__get()`