PHP: Nesne Yönelimli Programlama - Ders 4


Bir önceki yazımda sınıf sabitleri ve static anahtar sözcüğünden bahsetmiştim. Bu yazımda ise sihirli yöntemlerden bahsedeceğim.

Sihirli Yöntemler Nedir? 

Sınflarda, belirli olaylardan sonra tetiklenen özel metot isimlerine Sihirli Yöntemler denir.

Sihirli Yöntemler

İsim Açıklama
__construct() Kurucu metottur. Sınıftan bir nesne yaratıldığında ilk olarak çalışır. Genelde sınıf çalıştığında gerçekleşecek işlemlerin yapıldığı metottur.
__ destruct() Yıkıcı metottur. Sınıfla ilgli bütün işlemler tamamlandıktan sonra çalışır. Genelde, sınıf özelliklerinin temizlenmesinde kullanılır.
__clone() Sınıf nesnesi, clone anahtar sözcüğü ile kopyalanmak istendiğinde tetikilenir.
__toString() Sınıf nesnesi, ekrana yazdırılmak istendiğinde tetiklenir.
__sleep() Sınıf nesnesini serileştirmek( serialize() fonksiyonu kullanıldığında) istendiğinde tetikilenir.
__wakeup() __sleep() metodunun tam tersi unserialize() fonksiyonu kullanıldığında tetikilenir.
__invoke() Sınıf nesnesi, bir metot olarak çağrılırsa tetiklenir.
__set() Sınıf içinde olmayan yada dışarıdan erişilemeyen bir özelliğe veri girilirken tetiklenir
__get() Sınıf içinde olmayan yada dışarıdan erişilemeyen bir özellik okunurken tetiklenir
__isset() Sınıf içinde olmayan yada dışarıdan erişilemeyen bir özelliğe isset() veya empty() fonksiyonları uygulandığında tetiklenir.
__unset() Sınıf içinde olmayan yada dışarıdan erişilemeyen bir özelliğe unset() fonksiyonu uygulandığında tetiklenir.
__call() Sınıf içinde olmayan yada dışarıdan erişilemeyen bir metot çağrıldığında tetiklenir.
__callStatic() Sınıf içinde olmayan yada dışarıdan erişilemeyen bir statik metot çağrıldığında tetiklenir.
 

lib/Personel.php

Kod
<?php

class Personel
{
    public static $sayac = 0;
    protected $adsoyad;
    protected $yas;

    public function bilgiVer()
    {
        printf("%s adlı kişinin yaşı: %d <br/>\n",$this->adsoyad, $this->yas);
    }

    public function __construct($ad, $yas)
    {
        $this->adsoyad = $ad;
        $this->yas = $yas;
        printf("Çalışmaya başladım. <br />"); 
        ++self::$sayac;  
    }

    public function __destruct()
    {
        printf("<br /> İşim bitti ben gidiyorum. <br />");
    }

    public function __clone()
    {
        ++self::$sayac;  
        printf(" <br /> Beni kopyaladılar. :'( <br />");
    }

    public function __toString()
    {
        return $this->adsoyad;
    }

    public function __sleep()
    {
        return array('adsoyad');
    }


    public function __wakeup()
    {
        printf("<br /> Tekrardan ben geldim. <br />");
    }

    
    public function __invoke($x)
    {     
        var_dump($x);
    }


//======================================================================
// AŞIRI YÜKLEME
//======================================================================


    public function __set($ozellik, $deger)
    {
        echo "__set() fonksiyonu çalıştı: {$ozellik} değişkenine {$deger} değeri
        veriliyor.  Ne yapayım! <br/>";
    }

    public function __get($ozellik)
    {
        echo "__get() fonksiyonu çalıştı: {$ozellik} değişken değerini vereyim mi?.<br/>";
        echo $this->$ozellik;
    }


    public function __isset($ozellik)
    {
        echo $ozellik;
        if (isset($this->$ozellik)) echo ' tanımlanmıştır!';
        else echo ' tanımlanmamıştır!';
        echo "<br/>";
    } 

    public function __unset($ozellik)
    {
        echo $ozellik. 'silinmeye çalışıyor. Ne yapayım!';
        echo "<br/>";
    }

    public function __call($metot, $parametreler)
    {
        echo "$metot metodu çağrıldı: " . implode(', ', $parametreler)."<br/>";
    }


    public static function __callStatic($metot, $parametreler)
    {
        echo "$metot static metodu çağrıldı: " . implode(', ', $parametreler)."<br/>";
    }


}

ornek5.php

Kod
<?php

require "lib/Personel.php";

$x= new Personel("Rıza Güneş", 23);
$x->bilgiVer();

isset($x->adsoyad);

Personel::Hesapla(50,60);
//$x->adsoyad = "Akın Turgut";

//$x("Ali");

/*$seri = serialize($x);
print_r($seri);

unserialize($seri);*/

//echo $x;

//$y= clone $x;


echo '<hr> Sayaç Değeri: '.Personel::$sayac;

 


Kategoriler: PHP