Sobes.tech
Junior

PHP'de sihirli metodlar nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

PHP'deki sihirli metodlar, belirli durumlarda otomatik olarak çağrılan özel metodlardır. İsimleri iki alt çizgi (__) ile başlar.

Ana sihirli metodların listesi:

  • __construct(): Yeni bir nesne oluşturulurken çağrılır.
  • __destruct(): Bir nesne yok edilirken çağrılır.
  • __call($name, $arguments): Nesnenin erişilemeyen veya mevcut olmayan bir metodunu çağırmaya çalışırken çağrılır.
  • __callStatic($name, $arguments): Erişilemeyen veya mevcut olmayan statik bir metod çağırmaya çalışırken çağrılır.
  • __get($name): Erişilemeyen bir özelliğin değerini almaya çalışırken çağrılır.
  • __set($name, $value): Erişilemeyen bir özelliğin değerini ayarlamaya çalışırken çağrılır.
  • __isset($name): isset() veya empty() kullanılırken erişilemeyen bir özellik üzerinde çağrılır.
  • __unset($name): unset() kullanılırken erişilemeyen bir özellik üzerinde çağrılır.
  • __sleep(): Serileştirmeden önce çağrılır, serileştirilecek özelliklerin isimlerini içeren bir dizi döner.
  • __wakeup(): Serileştirmeden sonra çağrılır.
  • __toString(): Nesnenin string gibi davranmasını sağlar.
  • __invoke($args): Nesne fonksiyon gibi çağrılmaya çalışıldığında çağrılır.
  • __set_state(array $properties): var_export() fonksiyonu ile nesne dışa aktarılırken çağrılır.
  • __clone(): Nesne klonlandıktan sonra çağrılır.
  • __serialize(): Serileştirme sırasında çağrılır, verilerin dizisini döner.
  • __unserialize(array $data): Deserileştirme sırasında çağrılır, __serialize() ile alınan verileri alır.

__construct ve __destruct kullanımına örnek:

<?php
class Example {
    public function __construct() {
        echo "Nesne oluşturuldu\n";
    }

    public function __destruct() {
        echo "Nesne yok edildi\n";
    }
}

$obj = new Example();
unset($obj); // Nesneyi zorunlu olarak yok eder
?>

__get ve __set kullanımına örnek:

<?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; // Veya istisna fırlat
    }
}

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