Sobes.tech
Junior

PHP-də sehrli metodlar nədir?

sobes.tech Süni İntellekt

AI-dan cavab

PHP-də sehrli metodlar xüsusi metodlardır ki, müəyyən vəziyyətlərdə avtomatik olaraq çağırılırlar. Onların adları iki alt xətlə (__) ilə başlayır.

Əsas sehrli metodların siyahısı:

  • __construct(): Yeni obyekt yaradılarkən çağırılır.
  • __destruct(): Obyekt məhv edilərkən çağırılır.
  • __call($name, $arguments): Objektdə mövcud olmayan və ya əlçatan olmayan metodu çağırmağa cəhd edildikdə çağırılır.
  • __callStatic($name, $arguments): Statik metod əlçatan olmayan və ya mövcud olmayan zaman çağırılır.
  • __get($name): Əlçatan olmayan bir xassənin dəyərini almağa cəhd edildikdə çağırılır.
  • __set($name, $value): Əlçatan olmayan bir xassəyə dəyər təyin etməyə cəhd edildikdə çağırılır.
  • __isset($name): isset() və ya empty() istifadə edilərkən əlçatan olmayan xassə üzərində çağırılır.
  • __unset($name): unset() istifadə edilərkən əlçatan olmayan xassə üzərində çağırılır.
  • __sleep(): Serializasiyadan əvvəl çağırılır, serializasiya ediləcək xassələrin adlarını ehtiva edən massiv qaytarır.
  • __wakeup(): Deserializasiyadan sonra çağırılır.
  • __toString(): Objekti sətir kimi davranmağa imkan verir.
  • __invoke($args): Skript obyekti funksiyaya çağırmağa çalışdıqda çağırılır.
  • __set_state(array $properties): var_export() funksiyası ilə obyektin ixracı zamanı çağırılır.
  • __clone(): Ob'ektin klonlanmasının sonunda çağırılır və klonun konfiqurasiyasını həyata keçirir.
  • __serialize(): Serializasiyada çağırılır, serializasiya üçün məlumatların massivini qaytarır.
  • __unserialize(array $data): Deserializasiyada çağırılır, __serialize()-dən alınan məlumatları qəbul edir.

__construct__destruct istifadəsinə nümunələr:

<?php
class Example {
    public function __construct() {
        echo "Obyekt yaradıldı\n";
    }

    public function __destruct() {
        echo "Obyekt məhv edildi\n";
    }
}

$obj = new Example();
unset($obj); // Ob'ektin məcburi məhvi
?>

__get__set istifadəsinə nümunələr:

<?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ə ya istisna atmaq
    }
}

$store = new DataStore();
$store->name = "Alice"; // __set çağırır
echo $store->name; // __get çağırır
?>