Sobes.tech
Junior

Siniflərin hansı sehrli metodlarını bilirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

PHP-də sehrli metodlar xüsusi metodlardır ki, müəyyən hadisələr zamanı avtomatik olaraq çağrılır. Onlar __ (ikili alt xət) ilə başlayır.

Əsas sehrli metodlar:

  • __construct(): Sinifin yeni nümunəsi yaradıldıqda çağrılır. Objekti başlatmaq üçün istifadə olunur.
  • __destruct(): Objekti siləndə və ya skript bitəndə çağrılır. Resursları sərbəst buraxmaq üçün istifadə olunur.
  • __call(string $name, array $arguments): Əlçatan olmayan və ya mövcud olmayan metodu çağırmağa cəhd edildikdə çağrılır.
  • __callStatic(string $name, array $arguments): Statik və əlçatan olmayan metodu çağırmağa cəhd edildikdə çağrılır.
  • __get(string $name): Əlçatan olmayan və ya mövcud olmayan xüsusiyyətə giriş cəhdində çağrılır.
  • __set(string $name, mixed $value): Əlçatan olmayan və ya mövcud olmayan xüsusiyyətə dəyər təyin etməyə cəhd edildikdə çağrılır.
  • __isset(string $name): isset() və ya empty() istifadə edilərkən əlçatan olmayan və ya mövcud olmayan xüsusiyyət üçün çağrılır.
  • __unset(string $name): unset() istifadə edilərkən əlçatan olmayan və ya mövcud olmayan xüsusiyyət üçün çağrılır.
  • __serialize(): Objekti serialize() ilə seriyalaşdırmadan əvvəl çağrılır. Seriyalaşdırma üçün xüsusiyyətlərin massivini qaytarır.
  • __unserialize(array $data): Objekti unserialize() ilə deserializasiya edərkən çağrılır. Xüsusiyyətləri bərpa etmək üçün məlumat massivini alır.
  • __toString(): Objekti sətir kimi işləməyə imkan verir. Objekti sətir kimi çap etməyə cəhd ediləndə çağrılır. Sətir qaytarmalıdır.
  • __invoke(...$arguments): Objekti funksiya kimi işləməyə imkan verir. Objekti funksiya kimi çağırmağa cəhd ediləndə çağrılır.
  • __set_state(array $properties): var_export() ilə obyekti bərpa edərkən çağrılır. Obyektin xüsusiyyətlərinin massivini alır.
  • __debugInfo(): var_dump() istifadə ediləndə çağrılır. Debug üçün məlumatların massivini qaytarmalıdır.

__construct__toString istifadə nümunələri:

<?php
class MyClass {
    private $name;

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

    public function __toString(): string {
        return "Obyekt adı: " . $this->name;
    }
}

$obj = new MyClass("Test");
echo $obj; // __toString() çağıracaq

__get__set istifadə nümunələri:

<?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; // Yaxud istisna atmaq
    }
}

$obj = new MyClass();
$obj->prop1 = "Dəyər 1"; // __set() çağıracaq
echo $obj->prop1; // __get() çağıracaq