Sobes.tech
Junior

Hangi sınıf sihirli metodlarını biliyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

PHP'deki sihirli metodlar, belirli olaylar sırasında otomatik olarak çağrılan özel metodlardır. __ (çift alt çizgi) ile başlarlar.

Ana sihirli metodlar:

  • __construct(): Sınıfın yeni bir örneği oluşturulduğunda çağrılır. Nesnenin başlatılması için kullanılır.
  • __destruct(): Bir nesne silindiğinde veya betik sona erdiğinde çağrılır. Kaynakları serbest bırakmak için kullanılır.
  • __call(string $name, array $arguments): Erişilemeyen veya olmayan bir yöntemi çağırmaya çalışırken çağrılır.
  • __callStatic(string $name, array $arguments): Erişilemeyen veya olmayan statik bir yöntemi çağırmaya çalışırken çağrılır.
  • __get(string $name): Erişilemeyen veya olmayan bir özelliğe erişmeye çalışırken çağrılır.
  • __set(string $name, mixed $value): Erişilemeyen veya olmayan bir özelliğe değer atamaya çalışırken çağrılır.
  • __isset(string $name): isset() veya empty() kullanılırken çağrılır.
  • __unset(string $name): unset() kullanılırken çağrılır.
  • __serialize(): Nesne serialize() ile serileştirilmeden önce çağrılır. Serileştirme için özelliklerin dizisini döndürür.
  • __unserialize(array $data): Nesne unserialize() ile serileştirildiğinde çağrılır. Özellikleri geri yüklemek için veri dizisini alır.
  • __toString(): Nesneyi dize olarak kullanmaya izin verir. Nesneyi dize olarak yazdırmaya çalışırken çağrılır. Bir dize döndürmelidir.
  • __invoke(...$arguments): Nesneyi fonksiyon gibi işlemeye izin verir. Nesne fonksiyon gibi çağrılmaya çalışıldığında çağrılır.
  • __set_state(array $properties): var_export() ile nesne geri yüklenirken çağrılır. Nesnenin özelliklerinin dizisini alır.
  • __debugInfo(): var_dump() çağrıldığında çağrılır. Hata ayıklama için bilgi içeren bir dizi döndürmelidir.

__construct ve __toString kullanımına örnek:

<?php
class MyClass {
    private $name;

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

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

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

__get ve __set kullanımına örnek:

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

$obj = new MyClass();
$obj->prop1 = "Değer 1"; // __set() çağrılır
echo $obj->prop1; // __get() çağrılır