PHP OOP Sihirli Metotlar

Çeşitli işlemler için PHP tarafından oluşturulmuş sihirli metotlar ile ilgili bilgiler yer almaktadır.

PHP OOP Sihirli Metotlar

PHP çift alt çizgi (__) ile tanımlanmış metotlar sihirli / özel metot olarak adlandırılır.

Bu metotları diğer metotlardan ayıran en büyük fark sihirli metotların kendiliğinden çağrılmasıdır.

__construct ve __destruct

Nesne belleğe yüklenirken ve silinirken çalışan metotlardır.

<?php

class ornekNesne {

  public function __construct() {  // Nesne oluşturulduğunda otomatik çalışacak metot
    echo "Nesne belleğe yüklendi. <br />";
  }

  public function __destruct() {  // Nesne silindiğinde otomatik çalışacak metot
    echo "Nesne bellekten silindi.";
  }

}

$nesne = new ornekNesne();

?>

Detaylı bilgi için tıklayın.

__call

Nesne içinde olmayan bir metot çağrıldığında çalışır.

<?php

class OrnekNesne {

  public function __call($metodAdi, $metodParametreleri) {
    echo $metodAdi . " metodu bulunamadı.";
    print_r($metodParametreleri);
  }

}

$nesne = new OrnekNesne();
$nesne->AdiSoyadi("Yusuf", "SEZER");  // tanımlanmamış bir metot.

?>

__callStatic

Nesne içinde olmayan bir static metoda çağrıldığında çalışır.

<?php

class OrnekNesne {

  public static function __callStatic($metodAdi, $metodParametreleri) {
    echo $metodAdi . " metodu bulunamadı.";
    print_r($metodParametreleri);
  }

}

OrnekNesne::Listele("hepsi");  // tanımlanmamış static metot.

?>

Metodun static olduğuna dikkat edin.

__get

Nesne içinde olmayan veya erişim izni olmayan bir özelliğe erişilmeye çalışıldığında çalışır.

<?php

class OrnekNesne {

  private $adi;

  public function __get($ozellikAdi) {
    echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor.";
  }

}

$nesne = new OrnekNesne();
echo $nesne->adi;  // private olan bir özelliğe erişim
echo $nesne->soyadi;

?>

__set

Nesne içinde olmayan veya erişim izni olmayan bir özelliğe değer atanmaya çalışıldığında çalışır.

<?php

class OrnekNesne {

  private $adi;

  public function __set($ozellikAdi, $ozellikDegeri) {
    echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor. <br />";
    echo $ozellikDegeri . " değeri atanmaya çalışıldı. <br />";
  }

}

$nesne = new OrnekNesne();
$nesne->adi = "Yusuf";     // private bir özelliğe değer atanmak istendi.
$nesne->soyadi = "SEZER";  // olmayan bir özelliğe değer atanmak istendi.

?>

__isset

Nesne içinde olmayan veya erişim izni olmayan bir özellik isset veya empty fonksiyonu ile sınandığında çalışır.

<?php

class OrnekNesne {

  private $adi;

  public function __isset($ozellikAdi) {
    echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor. <br />";
  }

}

$nesne = new OrnekNesne();
isset($nesne->adi);
empty($nesne->adi);
isset($nesne->soyadi);
empty($nesne->soyadi);

?>

__unset

Nesne içinde olmayan veya erişim izni olmayan bir özellik unset fonksiyonu ile yok edilmeye çalışıldığında çalışır.

<?php

class OrnekNesne {

  private $adi;

  public function __unset($ozellikAdi) {
    echo $ozellikAdi. " özelliği bulunmuyor veya erişilemiyor. <br />";
  }

}

$nesne = new OrnekNesne();
unset($nesne->adi);
unset($nesne->soyadi);

?>

__sleep

Nesneye serialize fonksiyonu uygulandığında çalışır.

<?php

class OrnekNesne {

  public function __sleep() {
    echo "Nesne dizi haline getiriliyor.";
  }

}

$nesne = new OrnekNesne();
serialize($nesne);

?>

__wakeup

Nesneye unserialize fonksiyonu uygulandığında çalışır.

<?php

class OrnekNesne {

  public function __wakeup() {
    echo "Dizi nesne haline getiriliyor.";
  }

}

$nesne = new OrnekNesne();
$sonuc = serialize($nesne);
unserialize($sonuc);

?>

__toString

Nesne yazdırıldığında çalışır.

<?php

class OrnekNesne {

  public function __toString() {
    return "Nesne yazdırılmaya çalışıldı.";
  }

}

$nesne = new OrnekNesne();
echo $nesne;

?>

__invoke

Nesne fonksiyon gibi çalıştırıldığında çalışır.

<?php

class OrnekNesne {

  public function __invoke($gonderilenParametre) {
    echo "Nesne " . $gonderilenParametre . " parametresi ile fonksiyon olarak çalıştırıldı.";
  }

}

$nesne = new OrnekNesne();
$nesne(5);  // nesne fonksiyon gibi çalıştırıldı.

?>

__set_state

Nesneye var_export fonksiyonu uygulandığında çalışır.

<?php

class OrnekNesne {

  public $ozellik_1 = "Özellik 1";
  protected $ozellik_2 = "Özellik 2";
  private $ozellik_3 = "Özellik 3";

  public static function __set_state($degiskenler) {
    echo "Nesne özellikleri <ol>";
    foreach ($degiskenler as $degisken) {
      echo "<li>" . $degisken . "</li>";
    }
    echo "</ol>";
  }

}

$nesne = new OrnekNesne();
var_export($nesne);
echo "<br /> <br />";
eval(var_export($nesne, true) . ';');

?>

__clone

Nesne clone anahtar kelimesiyle kopyalandığında çalışır.

<?php

class OrnekNesne {

  private static $kopyaSayisi = 0;

  public function __clone() {
    self::$kopyaSayisi++;
  }

  public static function kopyaSayisi() {
    return "Toplam kopya sayısı : " . self::$kopyaSayisi;
  }

}

$nesne = new OrnekNesne();
$nesne1 = clone $nesne;
$nesne2 = clone $nesne;
$nesne3 = clone $nesne;

echo OrnekNesne::kopyaSayisi();

?>

__debugInfo

Nesneye var_dump fonksiyonu uygulandığında çalışır.

<?php

class OrnekNesne {

  public $adi = "yuSuf";
  public $soyadi = "seZeR";

  public function __debugInfo() {
    $dizi = array();
    $dizi[] = ucwords(strtolower($this->adi));
    $dizi[] = strtoupper($this->soyadi);
    return $dizi;
  }

}

$nesne = new OrnekNesne();
var_dump($nesne);

?>

PHP çift alt çizgi (__) ile başlayan metotları sihirli metot olarak tanımlamıştır. Nesne içinde metotların çift alt çizgi (__) ile başlamaması faydalı olacaktır.

PHP OOP Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!