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..
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. 🙂
Allah senden razı olsun abii bizi kurtardınn….
Bilgi verici nitelikte bir yazı olmuş.
Teşekkürler 🙂
Rica ederim, beğenmenize sevindim..
Öncelikle teşekkürler. İsim kısmını veritabanından alacağımız şekilde ufak bir örnek verebilir misiniz?
Veritabanı işlemleri için http://www.onurcanalp.com/2013/12/14/pdo-yani-php-data-object/ makalemi okuyabilirsin orada kabaca anlatıyor. Bu makaleden anladıklarınla diğerini birleştirmek sana kalıyor 😉