Public, Private, Protected, Final, Const , Extends ve Static Kavramları

Standard

Günümzde OOP yani Nesne Yönelimli Programlama iyice hayatımızda yerini aldı. Ben bu makale de size OOP ile birlikte hayatımıza girmiş olan bu kavramlardan değinmek istiyorum. Bir çok konu başlığını tek makaleye toplamak ne kadar doğru bilmiyorum ama bi çırpıda hepsi aradan çıksın istiyorum. Küçük küçük örnekler vererek detaylandırmaya çalışacağım…

OOP yani Türkçe karşılığı Nesne Yönelimli Programlama da bir sınıftaki metod ve değişkenlere o sınıfın üyeleri (member) denir. Bu üyeleri çeşitli şekillerde tanımlayabiliriz. Yavaştan bu tanımlara değinerek başlayalım isterseniz..

Public

Public kullanılan en yaygın tanımdır. Bir metod veya değişken public olarak tanımladığında o üyeye ilgili sınıfın her yerinden erişebilirsiniz. Aynı zamanda sınıftan türeyen bir sınıf içersinden de erişilebilir.

<?php
class programci
{
    public $isim = 'Onur';

    public function ismiOku()
    {
        echo $this->isim;
    }
}

$programci = new programci;
echo $programci->isim; //değişkene de erişebiliyoruz
echo '<br>';
$programci->ismiOku(); //metoda da erişebiliyoruz
?>

Private

Private üyelere o sınıf dışından herhangi bir şekilde erişilemez ve bu üyeler kalıtım yoluyla aktarılmaz.. Private olarak tanımlanan değişken ve fonksiyonlar sadece o sınıfın kendi metotları tarafından kullanılabilir. Yani işin özü o metod veya değişken sadece o sınıfa özel olur.
Bir değişkeni private olarak tanımladığınızda ve bu değişkenin başka bir sınıf tarafından kullanılması gerektiğinde bu değişkeni döndüren bir public fonksiyon yazarak işlemi gerçekleştirebilirsiniz.

<?php
class programci
{
    private $isim = 'Onur'; //Bu değişkene direk $programci->isim diyerek ulaşamazsınız

    public function ismiOku() //$isim değişkenine erişmek için kullanılacağımız metod
    {
        echo $this->isim;
    }
}

$programci = new programci;
$programci->ismiOku();
?>

Not: Private üyenin tanımlandığı sınıfa extend eden diğer alt sınıflar da private üyeye erişemez.

Protected

Protected aslında private e benzer. Protected özelliği atanan bir değişken veya metot, sadece sınıf içerisinden veya türetilen bir sınıf içerisinden erişilebilir.. Yani bir sınıf extend ettiği sınıfın protected üyelerine erişebilir ama private üyelerine erişemez.

<?php
class programci
{
    protected $isim = 'onur'; //private deki gibi direk erişilemez ancak türetilen sınıfta kullanılabilir.

 	/*
 	$isim değişkenine erişmek için kullanacağımız metod. 
 	$programci->isim şeklinde erişmek istersek "Cannot access protected property.." şeklinde hata verir.
 	*/
    public function ismiOku() 
    {
        echo $this->isim;	
    }
}

$programci = new programci;
$programci->ismiOku();

class senior extends programci
{
	//$isim değişkenini tanımlamadı ama türettiğimiz sınıftan çekti. Private olsa o da gelmezdi..
	public function ismiOku()
	{
		echo $this->isim;
	}
}

$programci2 = new senior;
$programci2->ismiOku();
?>

Final

Çok kısaca değinmek gerekirse metod veya sınıfın bir daha türetilememesini sağlamış bulunuyoruz..
Aslında final konusunda daha önceden örnekle birlikte bir makale yazmıştım. Dilerseniz bu makaleye http://www.onurcanalp.com/2013/06/27/php5-ve-final-kavrami/ adresinden erişebilirsiniz.

Const

Daha önce sabitleri define ile tanımlamış olduğunuzu varsayıyorum. Eğer define nedir diyorsanız http://php.net/define adresinden detaylı bilgi alabilirsiniz..
PHP 5.3 ile birlikte hayatımıza giren Const, define a benzer ve const özelliği atanan bir değer class içinde sabit özelliğini alır yani sadece class içinde geçerlidir.
Const özelliği atanmış bir sabite $this ile değil yine self:: ile erişim yapmaktayız dolayısıyla static özelliğini alırlar çünkü sınıf boyunca sakladıkları değer aynı kalacağından bir defaya mahsus ram de tutulurlar.

Ayrıca const özelliği atanan sabitin başında $ işareti bulanamaz.
const sabit = ‘değer’; şeklinde tanımlanırlar.

<?php
class programci
{
    const isim = 'Onur'; //$ olmadan direk tanımladık gördüğünüz gibi

    public function ismiOku()
    {
        echo self::isim; //this yerine self ve :: ile const a eriştik
    }
}

$programci = new programci;
echo programci::isim; // Bu şekilde de erişebiliriz

$programci->ismiOku(); //bu şekilde de erişebiliriz. 
?>

Static

Static özelliği atanmış bir değişken veya metot ram de saklanır. Bu sayede sürekli çağırılıp ram den çalmaz ve performans kaybını önlemiş oluruz. Static tanımı yaptığınızda o sınıfın üyesine o sınıfın nesnelerini kullanarak değil, doğrudan erişebilirsiniz. Static özelliğini herşeye atamakta doğru değildir. Genelde sabit değişken veya metota atamak doğrudur. Çünkü bunlar hep aynı sonucu döndürecekleri için bir defa rame aktarılması bize performans açısından büyük hız getirecektir.

Ayrıca static özelliği atanmış bir değişken veya metoda sınıf içerisinde $this yerine self:: ile erişim sağlanmaktadır.

<?php
class programci
{
    private static $isim = 'Onur';

    public static function ismiOku() //static tanımladık fonksiyonu ve sınıftan bağımsız çağırabiliriz..
    {
        echo self::$isim;
    }
}

programci::ismiOku(); //sınıfı oluşturmadan direk erişebildik gördüğünüz gibi
?>

Extends

Sınıfımızdan başka sınıf türetmek istiyorsak veya başka bir deyiş ile sınıfımız başka bir sınıfın alt sınıfı olacaksa extends anahtar sözcüğü kullanılır..

<?php
class departman
{
    protected $departman = 'Yazılım'; 
    public function departmanOku() 
    {
        echo $this->departman;	
    }
}

class programci extends departman
{
	private $isim = 'Onur';
	public function ismiOku()
	{
		echo $this->isim;
	}
}

$kisi = new programci;
$kisi->departmanOku();
$kisi->ismiOku();
?>

Temel olarak verdiğim örnekleri çoğaltıp detaylandırabilirsiniz. Ben Şimdi burada bırakıyorum, yeterince uzattım galiba 
Umarım faydalı olur.. Herkese iyi çalışmalar..

Print Friendly, PDF & Email
Facebooktwitterlinkedin

6 thoughts on “Public, Private, Protected, Final, Const , Extends ve Static Kavramları

  1. Muhammet Arslantaş

    Yazı için teşekkürler. Basit konularda da olsa böyle yazılar yeni başlayanlar ve kafasında soru işareti oluşanlar için altın değerinde. 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.