Yücel Alkan

PHP'de Class İşlemleri

Merhabalar. Bu yazımda Class tanımından ve PHP içerisinde Class işlemlerinden bahsedeceğim. Önceki yazımda Class'ın ne olduğuna değinmiştin ancak burada tekrar etmekte fayda var. Class; nesnelerin, yazılımı meydana getiren parçaların yazılım dili içerisinde tanımlandığı, özellik ve eylemlerinin belirtildiği yapılardır. 

PHP'de Class tanımlama işlemi aşağıdaki gibi yapılır. 

class ClassAdi {
    // İşlemler
}

Class oluştururken istediğiniz ismi verebilirsiniz. Ancak tasarlamak istediğiniz nesneye ait genel geçer bir isim vermek uygun olacaktır. Örneğin; futbolcularla ilgili class tanımlarken futbolcu, kitaplarla ilgili class tanımlarken kitap gibi genelgeçer bir isim vermek gerekir. Yine class isimlerinin ilk harfini büyük yazmak, eğer class ismi birkaç kelimeden oluşuyorsa her kelimenin ilk harfini büyük yazmakta fayda vardır. Örneğin; cep telefonu class'ı tanımlama istiyorsak class CepTelefonu {} şeklinde isim vermek iyi olacaktır. 

Class içerisinde nesneye ait özellikleri değişken, nesneye ait eylemleri yani işlemleri ise function yapıları ile tanımlıyoruz. Örneğin bir futbolcu class'ı oluşturup birkaç özellik ekleyelim. 

class Futbolcu {
    public $adSoyad;
    public $takim;    
    public $golSayisi;
    public $asistSayisi;
}

Değişken isimlerimizin başında public ifadesi yer alıyor. Şimdilik bu ifadeye takılmayalım. Daha sonraki yazılarımda İnşallah açıklayacağım. 

Yukarıdaki tanımlama ile aslında biz PHP'ye şunu demek istedik: Bizim Futbolcu adında Class'ımız olacak, bu Class'ın da adSoyad, takim, golSayisi ve asistSayisi adında dört tane özelliği olacak. Tabi ki bu özelliklerin yani değişkenlerin sayısını arttırmak mümkündür.

Çok fazla tercih edilmese de, PHP'de değişkenlerin türlerini de belirterek tanımlama yapmak mümkündür. Yani aşağıdaki gibi değişkenlerin türlerini de ekleyebilirsiniz. 

class Futbolcu {
    public String $adSoyad;
    public String $takim;    
    public int $golSayisi;
    public int $asistSayisi;
}

Oluşturduğumuz bu Class içerisinde değişken tanımlayarak nesnenin özelliklerini belirttik. Peki bu nesneye ait işlemleri, eylemleri yani fonksiyonları nasıl tanımlıyoruz? Şimdi ona bakalım;

class Futbolcu {
    public $adSoyad;
    public $takim;
    public $golSayisi;
    public $asistSayisi;

    function golAt(){
        // İşlemler
    }

    function asistYap(){
        // İşlemler
    }
}

Oluşturduğumuz Futbolcu class'ına iki tane fonksiyon tanımladık. Tabi ki bu fonksiyonların sayısını dilediğiniz kadar arttırabilirsiniz. 

Nesne Üretme

Artık oluşturduğumuz bu class'tan istediğimiz kadar nesne üretebiliriz. Mesela Messi adında bir nesne üretelim.

$messi = new Futbolcu();

Artık $messi adında bir nesnemiz var. Ancak bu nesnenin şu an için herhangi bir özelliği bulunmuyor. Şimdi de Messi'ye ait özellikleri girelim. 

$messi->adSoyad = "Lionel Messi";
$messi->takim = "Barcelona";
$messi->golSayisi = 45;
$messi->asistSayisi = 37;

Oluşturduğumuz nesnenin ait olduğu class içerisindeki değişken ve fonksiyonlara ulaşmak için -> ifadesi kullanılır. Yukarıdaki örnekte dört özelliğe değer atamış olduk. 

Bir nesneye ait değeri ekrana yazmak için ise yine aynı yapı kullanılır. Diyelim ki $messi nesnesine ait bilgileri ekrana yazdırmak istiyoruz. Aşağıdaki gibi olacaktır. 

echo $messi->adSoyad;
echo $messi->takim;

Sayfamızı yenilediğimiz zaman ekrana "Lionel Messi" ve "Barcelona değerlerini yazacaktır. 

Fonksiyonlara erişim de değişkenlere erişim ile birebir aynıdır. Mesela $messi nesnesine ait golAt() ve asistYap fonksiyonlarını aşağıdaki gibi çalıştırabiliriz. 

$messi->golAt();
$messi->asistYap();

Tabi ki bu fonksiyonu çağırdığımız zaman herhangi bir işlem olmayacaktır. Yukarıdaki fonksiyonlarımız içerisinde küçük bir düzenleme yapalım. 

class Futbolcu {
    public $adSoyad;
    public $takim;
    public $golSayisi;
    public $asistSayisi;

    function golAt(){
        echo "futbolcu gol attı";
    }

    function asistYap(){
        echo "futbolcu asist yaptı";
    }
}

Artık golAt ve asistYap fonksiyonlarını çağırdığımız zaman ekrana "futbolcu gol attı" ve "futbolcu asist yaptı" şeklinde metinler yazılacaktır. 

Class İçerisinde $this İfadesi

Yukarıdaki örnek çok basit oldu. Örneğimizi biraz genişletelim. Bir nesneye ait golAt() ve asistYap() fonksiyonlarını çağırdığımız zaman, futbolcunun gol ve asist sayıları artsın. İşte bunun için fonksiyonların içinden değişkenlere erişim sağlamamız lazım. Bu erişim için $this ifadesi kullanılır. 

Bir class içerisinde $this ifadesi o class'ı ifade etmektedir. Yani herhangi bir fonksiyon içinde, class bünyesinde tanımlanan değişken veya başka fonksiyonlara erişim sağlamak istiyorsak $this ifadesi kullanılır. 

Örneğimize geri dönelim. Nesneye ait golAt() ve asistYap() fonksiyonlarını çağırdığım zaman o nesnenin gol ve asist sayıları artsın. Şimdi de bunu gerçekleştirelim.

class Futbolcu {
    public $adSoyad;
    public $takim;
    public $golSayisi;
    public $asistSayisi;

    function golAt(){
        $this->golSayisi++;
    }

    function asistYap(){
        $this->asistSayisi++;
    }
}

Biz $messi adında nesne oluştururken gol saısını 45, asist sayısını 37 olarak tanımlamıştık. Şimdi bu nesneye ait golAt() ve asistYap() fonksiyonlarını çağırıp, arından da gol ve asist sayılarını ekrana yazdıralım. 

$messi->golAt();
$messi->asistYap();

echo $messi->golSayisi;
echo $messi->asistSayisi;

Bu satırları çalıştırdığım zaman ekrana 46 ve 38 değerlerini yazdıracaktır. İşte fonksiyonlar üzerinden class içerisindeki değişken veya diğer fonksiyonlara erişim de bu şekilde sağlanır. PHP kodlarımın son hali aşağıdaki gibidir. 

class Futbolcu {
    public $adSoyad;
    public $takim;
    public $golSayisi;
    public $asistSayisi;

    function golAt(){
        $this->golSayisi++;
    }

    function asistYap(){
        $this->asistSayisi++;
    }
}

$messi = new Futbolcu();
$messi->adSoyad = "Lionel Messi";
$messi->takim = "Barcelona";
$messi->golSayisi = 45;
$messi->asistSayisi = 37;

$messi->golAt();
$messi->asistYap();

echo $messi->golSayisi;
echo $messi->asistSayisi;

Class ile İlgili Notlar

Bir sayfa içerisinde dilediğiniz kadar class tanımlaması yapabilirsiniz. Ancak her class'ın ayrı bir sayfada tanımlanması ve dosya adının da class ismi ile aynı olması okunabilirlik ve hata ayıklama açısından önemlidir. 

Bir class üzerinden dilediğiniz kadar nesne üretebilirsiniz. Biz bir tane yani $messi adında bir nesne ürettik ama siz dilediğiniz kadar üretebilirsiniz. 

Oluşturulan bir class Ram bellekte yer kaplamaz ancak her nesne Ram'da yer kaplar. 

Class isimlerini büyük harfle başlatmak ve eğer class ismi birkaç kelimeden oluşacaksa her kelimenin ilk harfini büyük yazmak önemlidir. 

Class içerisinde yer alan bir fonksiyondan, yine class içerisinde tanımlanan bir fonksiyon veya değişkene $this ifadesi ile erişim sağlanır. 

Konuyla ilgili videoya aşağıdan ulaşabilirsiniz. 



Soru ve görüşlerinizi yorum olarak bırakabilirsiniz. Hayırlı çalışmalar dilerim. 

26.05.2020
202
Yorumlar
Bu içeriğe henüz yorum yapılmamıştır. İlk yorum yapan siz olun!
Yorum Yapın