Php OOP – Class Yapıları ve Metodlar (Public,Private,Protected,Extends…)

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.

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.

AuthorHarun ALP

Bu adam , bilgi sahibi olduğu konularda makalelerini daha bilgilendirici hale getirip görseller ile süslüyor ve seo uyumlu makaleler ortaya çıkarıyor. Güncel webmaster konularını işlemekten keyif alıyor ve genelde her makale aslında bir sorunun çözümü niteliğinde.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir