Sobes.tech
Junior

Qaysi sinf magik usullari bilan tanishsiz?

sobes.tech AI

AIdan javob

PHP'dagi sehrli metodlar, muayyan voqealar vaqtida avtomatik ravishda chaqiriladigan maxsus metodlardir. Ular __ (ikkilamchi chiziqcha) bilan boshlanadi.

Asosiy sehrli metodlar:

  • __construct(): Yangi sinf nusxasi yaratilganda chaqiriladi. Ob'ektni boshlash uchun ishlatiladi.
  • __destruct(): Ob'ekt o'chirilganda yoki skript tugaganda chaqiriladi. Resurslarni bo'shatish uchun ishlatiladi.
  • __call(string $name, array $arguments): Mavjud yoki kirish mumkin bo'lmagan metodni chaqirishga urinishda chaqiriladi.
  • __callStatic(string $name, array $arguments): Statik metodni chaqirishga urinishda chaqiriladi.
  • __get(string $name): Kirish mumkin bo'lmagan yoki mavjud bo'lmagan xususiyatga kirishga urinishda chaqiriladi.
  • __set(string $name, mixed $value): Kirish mumkin bo'lmagan yoki mavjud bo'lmagan xususiyatga qiymat belgilashga urinishda chaqiriladi.
  • __isset(string $name): isset() yoki empty() bilan kirish mumkin bo'lmagan yoki mavjud bo'lmagan xususiyat uchun chaqiriladi.
  • __unset(string $name): unset() bilan kirish mumkin bo'lmagan yoki mavjud bo'lmagan xususiyat uchun chaqiriladi.
  • __serialize(): Ob'ektni serialize() yordamida serializatsiya qilishdan oldin chaqiriladi. Serializatsiya uchun xususiyatlar ro'yxatini qaytaradi.
  • __unserialize(array $data): Ob'ektni unserialize() yordamida deserializatsiya qilishda chaqiriladi. Xususiyatlarni tiklash uchun ma'lumotlar ro'yxatini oladi.
  • __toString(): Ob'ektni satr sifatida ko'rishga imkon beradi. Ob'ektni satr sifatida chiqarishga urinishda chaqiriladi. Satr qaytarishi kerak.
  • __invoke(...$arguments): Ob'ektni funktsiya sifatida ishlashga imkon beradi. Ob'ektni funktsiya sifatida chaqirishga urinishda chaqiriladi.
  • __set_state(array $properties): var_export() yordamida ob'ektni tiklashda chaqiriladi. Ob'ektning xususiyatlar ro'yxatini oladi.
  • __debugInfo(): var_dump() yordamida ob'ektni tekshirishda chaqiriladi. Debug uchun ma'lumotlar ro'yxatini qaytarishi kerak.

__construct va __toString ning misollari:

<?php
class MyClass {
    private $name;

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

    public function __toString(): string {
        return "Ob'ekt nomi: " . $this->name;
    }
}

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

__get va __set ning misollari:

<?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; // Yoki istisno chiqarish
    }
}

$obj = new MyClass();
$obj->prop1 = "Qiymat 1"; // __set() chaqiriladi
echo $obj->prop1; // __get() chaqiriladi