Sobes.tech
Junior

Кадом усулҳои ҷодуии синфҳоро медонед?

sobes.tech AI

Ҷавоб аз AI

Магикӣ методҳо дар PHP махсусан методҳое мебошанд, ки автоматӣ дар вақти муайян даъват мешаванд. Онҳо бо __ (дугонаи зерин) оғоз мешаванд.

Методҳои магикӣ асосӣ:

  • __construct(): Дар вақти эҷоди намунаи нав аз класа даъват мешавад. Барои оғоз додани объект истифода мешавад.
  • __destruct(): Дар вақти нест кардани объект ё анҷоми скрипт даъват мешавад. Барои озод кардани манбаъҳо истифода мешавад.
  • __call(string $name, array $arguments): Дар вақти кӯшиши даъвати методи дастрас ё ғайриҳузур даъват мешавад.
  • __callStatic(string $name, array $arguments): Дар вақти кӯшиши даъвати методи статикӣ, ки дастрас нест ё ҳузур надорад.
  • __get(string $name): Дар вақти кӯшиши дастрасӣ ба хусусияти дастрас ё ғайриҳузур даъват мешавад.
  • __set(string $name, mixed $value): Дар вақти кӯшиши таъин кардани арзиш ба хусусияти дастрас ё ғайриҳузур даъват мешавад.
  • __isset(string $name): Дар вақти даъвати isset() ё empty() ба хусусияти дастрас ё ғайриҳузур даъват мешавад.
  • __unset(string $name): Дар вақти даъвати unset() ба хусусияти дастрас ё ғайриҳузур даъват мешавад.
  • __serialize(): Пеш аз сериалкунии объект бо serialize() даъват мешавад. Массиви хусусиятҳоро барои сериалкунии бармегардонад.
  • __unserialize(array $data): Дар вақти десериалкунии объект бо unserialize() даъват мешавад. Массиви маълумотҳоро барои барқарор кардани хусусиятҳо мегирад.
  • __toString(): Имкон медиҳад, ки объект ҳамчун сатр баррасӣ шавад. Дар вақти кӯшиши баромад кардани объект ҳамчун сатр (масалан, бо echo) даъват мешавад. М бояд баргардонад сатр.
  • __invoke(...$arguments): Имкон медиҳад, ки объект ҳамчун функсия коркард шавад. Дар вақти кӯшиши даъвати объект ҳамчун функсия даъват мешавад.
  • __set_state(array $properties): Дар вақти барқарор кардани объект бо var_export() даъват мешавад. Массиви хусусиятҳои объектро мегирад.
  • __debugInfo(): Дар вақти даъвати var_dump() ба объект даъват мешавад. М бояд массив бо маълумот барои хатоҷудоиро баргардонад.

Масалан истифодаи __construct ва __toString:

<?php
class MyClass {
    private $name;

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

    public function __toString(): string {
        return "Объект бо номи: " . $this->name;
    }
}

$obj = new MyClass("Тест");
echo $obj; // Даъвати __toString()

Масалан истифодаи __get ва __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; // Ё баромадани истисно
    }
}

$obj = new MyClass();
$obj->prop1 = "Арзиши 1"; // Даъвати __set()
echo $obj->prop1; // Даъвати __get()