Zaman ilerledikçe OOP yani Nesne Yönelimli Programlama popülerliğini daha da arttıracak gibi görünüyor. Public,Private,Protected,Cons,Extends,Final,Static Kavramları artık bizim için büyük önem arz edecek. Bu kavramların ne işe yaradıklarını ve farklılıklarını kaleme alalım. Birer örnek ile kullanımlarına değinerek detaylandırmaya çalışayım.
OOP’da bir sınıftan meydana gelen method ya da değişkenler o sınıfın birer üyesi(member) olurlar. Farklı member tanımlamaları yapabiliriz. İlk olarak Public tanımlamasına bakalım.
İçerik Haritası
Public
Public tanımı kullanılan tanımlardan en yaygınıdır. Bir method veya değişken public olarak tanımlanırsa eğer ona ilgili sınıfta her yerden erişilebir. Hatta bir alt sınıf oluşturulursa oradan da erişilmesi mümkündür. Örneğine bakacak olursak ;
class programci { public $isim = 'Mehmet'; public function isimOku() { echo $this->isim; } } $yazilimci = new yazilimci; echo $yazilimci->isim; //değişkene de erişim mümkün echo '<br>'; $yazilimci->isimOku(); //metoda da erişim mümkün
Private
Private olarak tanımlanan bir değişken veya methoda ilgili sınıf dışında erişmek mümkün değildir. Kalıtım yoluyla dahi olsa ilgili sınıfın elemanı olmayan hiçbir method ile erişmek mümkün değildir. Private olarak tanımlanan bir method ya da değişken ilgili sınıfa özgü olur ve buna diğer sınıflardan erişmek için yalnızca bir fonksiyon aracı olabilir. Bu fonksiyon da tabi ki public değeri döndüren iyi bir fonksiyon olmalıdır.
class yazilimci { private $isim = 'Selim'; //Bu değişkene direk $yazilimci->isim şeklinde ulaşmak mümkün değildir. public function isimOku() //$isim değişkenine erişim için bu method kullanılabilir. { echo $this->isim; } } $yazilimci = new yazilimci; $yazilimci->ismiOku();
Görüldüğü gibi direk ulaşım private ile mümkün değil. Ancak yukarıdaki gibi bir fonksiyonun yazılması gerekir.
Protected
Private ile hemen hemen aynıdır. Ama private bir değişken ya da method’a extend edilen başka bir sınıftan erişilemezken burada erişim mümkündür. Yani alt sınıflar ile protected tanımlanan bir methoda erişilebilir.
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
Eğer bir method veya sınıfın yeniden türetilmemesini istiyorsak final sihirli sözcüğüyle tanımlama yapıyoruz. Bu sayede kalıtım yoluyla başka bir alt sınıf veya yeni sınıf oluşturulamıyor. Final kullanımı oldukça basit ve sade.
Sınıflarda Final Kullanımı
final class FinalSinif { public function abcMethod() { echo "FinalSinif method u çağrıldı"; } } //Compile error verecektir çünkü final sınıfı türetilemez class YeniSinif extends FinalSinif { public function abcMethod() { echo "YeniSinif method u çağrıldı"; } } $isim= new YeniSinif(); $isim->abcMethod();
Methodlarda final kullanımı
class kokSinif { final public function abcFinalMethod() { echo "kokSinif method istendi"; } } class altSinif extends kokSinif { //Sonuç yine Compile error public function abcFinalMethod() { echo "altSinif method istendi"; } } $isim= new altSinif(); $isim->abcFinalMethod();
Const
Php ile kullanılan define‘ler ile aynı görevi görmektedirler. Php 5.3 geldiğinden bu yana kullanılan construct’lar tanımlanırken başlarına $ işareti koyulmaz. Const ile tanımlanan bir sabite ulaşmak istersek eğer $this değil self:: ile ulaşım yapmalıyız. Const, yalnızca sınıflar içerisinde tanımlanabilirler. Sınıf içerisinde hep aynı değeri tutacağı için ram’de bir sefere mahsus yer tutarlar.
const sabit = ‘değer’; şeklinde bir kullanım söz konusu olup yukarıda belirttiğim gibi başına $ işareti koyulmaz.
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 erişiriz } } $programci = new programci; echo programci::isim; // Bu şekilde de erişebiliriz $programci->ismiOku(); //bu şekilde de erişebiliriz.
Static
Bir değişken veya methoda static tanımlaması yaparsak bu değer ramde saklanmaya başlar. Sürekli çağırmakla uğraşmadığımız içinde bizim için performans açısından önemlidir.Static tanımı yapılırsa eğer bir üyeye erişmek için o sınıfın nesnesini kullanmak zorunda değiliz yani direk erişebiliriz. Genel olarak sabit değişken veya methodlara tanımlanmaları daha doğru olacaktır zira döndürdüğü değer aynı olduğundan bir defa ramde tutulması yeterli olacaktır böylece hız açısından katkı sağlayacaktır.
Static kullanımı da aynı const gibidir. Erişim için ilgili sınıf veya method içerisinde $this yerine self:: şeklinde kullanmalıyız.
class programci { private static $isim = 'Harun'; public static function ismiOku() //Static tanımlandığı için sınıftan bağımsız çağrılabilir. { echo self::$isim; } } programci::ismiOku(); //Sınıf oluşturulmadan da direk erişilebilir.
Extends
Bir sınıftan başka bir alt sınıf üretmek istiyorsak extends sözcüğü kullanılmaktadır. Buna kalıtım da denebilir. Miras alınan özellikler ilgili alt sınıfta da kullanılabilir.
class departman { protected $departman = 'Yazılım'; public function departmanOku() { echo $this->departman; } } class programci extends departman { private $isim = 'Harun'; public function ismiOku() { echo $this->isim; } } $kisi = new programci; $kisi->departmanOku(); $kisi->ismiOku();
Temelde Public,Private,Protected,Cons,Extends,Final,Static Kavramları bu şekildeydi. Bunları daha da detaylandırabilir , örnekleri çoğaltabilirsiniz. Nesne yönelimli programlama ne kadar önemliyse bu kavramlar da o kadar önemlidir. Herkese iyi çalışmalar.