PHP Type Hinting

PHP Type Hinting ya da Türkçesi Tür Dayatma. Bu yazıda Type Hinting olayından bahsedeceğim.

Type Hinting’de esas olay fonksiyona gönderilen parametrenin istediğimiz bir türde olmasını sağlamak. Örneğin yazdir diye bir fonksiyonunuz var ve bu yazdir fonksiyonu sadece array yazdiracak.

Örneğin:

function yazdir(array $param){
    print_r($param);
}
yazdir(array('Merhaba'));//calisacak
yazdir('Merhaba');//hata verecek

Gördüğünüz gibi yazdir fonksiyonu sadece array türünü kabul ediyor. String gelince hata verdi (bu hatayı handle etmek için set_error_handler fonksiyonunu kullanabilirsiniz.).

Şimdi en basit Type Hinting olayını gördük.

Bir de bunu Class‘lar ile deneyelim.

Önce kodu vereyim sonra açıklayım.

abstract class yonetici{

    public function getir(){
        return $this->veri;
    }
}

class A extends yonetici{

    public $veri = "A CAGIRILDI \n";

}

class B extends yonetici{

    public $veri = "B CAGIRILDI \n";

}

class C{

    public $veri = "C CAGIRILDI \n";

    function getir(){
        return $this->veri;
    }
}

function yazdir(yonetici $x){
    echo $x->getir();
}

$a1 = new a;
$b1 = new b;
$c1 = new c;

yazdir($a1);//calisacak
yazdir($b1);//calisacak
yazdir($c1);//hata verecek

Abstract class’dan extends edilmiş 2 tane (A ve B) class’ları var. C ise tamamen bağımsız bir class.

yazdir fonksiyonunda ise bir Type Hinting yapılmış; sadece yonetici class’ındaki getir methodu işlenecek. Ancak C class‘ında getir methodu olmasına rağmen, yonetici class‘ından extends edilmediği için hata verecektir.

Nesneler oluşturulup yazdir‘a gönderilince, gönderilmiş nesnelerin içinde getir methodu aranıyor. Eğer bulamazsa hata veriyor. Bu sondaki yazdir içinden method çağırma için ayrıca Bkz.: Duck Typing

 
3 Kudos
Don't move
  1. Çok güzel örneklerle çok güzel bir anlatım. Tebrik ve teşekkür ederim.

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>