MENÜ

Php Dersleri 7 : Sınıflar

861 defa okundu Yorumlanmadı kategorisinde, tarihinde yayınlandı
Php Dersleri 7 : Sınıflar

Bir önceki dersimizde fonksiyon kullanımını görmüştük. Şimdi ise bu fonksiyonları nasıl birleştirerek daha derli toplu bir kullanım şekline sokabiliriz sorusuna yanıt arayacağız. Ancak bu derse geçmeden önce uzunca bir müddet kafalarda soru işaretleri oluşturan Nesne Yönelimli Programlamanın gerekliliğinden bahsetmek gerekiyor. Nesne yönelimli programlama mantığı basitleştirmek üzere tasarlanmış bir kodlama tekniğidir. Bu teknikte kalıplarını sizin belirlediğiniz nesneler oluşturulur ve nesnenin içeriği sizin tarafınızdan belirlenebilir. Bu nesneler tamamen hayal gücünüzle sınırlı olmakla beraber birçok çok boyutlu matrisi bünyesinde barındırabilir. Örneklemek gerekirse oluşturduğunuz mağaza scriptinde satış için ekleyeceğiniz öğeyi bir nesne olarak oluşturarak id, ad gibi o nesneye özel ortak değerleri nesne tablosundaki karşılığı olarak nesne üzerinde tutacağınız gibi stok değerini stoklar tablosundaki öğe değerinin karşılığı olarak aynı nesnede tutabilirsiniz. Bu şekilde dahada genişletirsek tek sınıf içerisinde tanımladığımız fonksiyonlar bütününü her defasında nesneden ayrılmadan tamamen nesneye değer atama yöntemi ile basit bir şekilde düzenleyebiliriz. Nesne yönelimli programlama php diline php5 ile kazandırılmıştır ve php dilinin web programlamada tahta oturmasında önemli rolü vardır.

Gelelim nasıl class (sınıf) tanımlayacağımıza

1
2
3
4
class urun
{
  //Bu alanda değişkenlerimizi ve fonksiyonlarımızı tanımlayacağız.
}

Değişkenler sınıf yapısı içerisinde 3 farklı gizlilik değerinde tanımlanmaktadır. Bunlardan ilki public olarak tanımlanmasıdır. Bu tanımlamada değişken scriptin heryerinde kullanılabilir durumdadır. İkincisi private yani özel değişken tanımıdır bu türde tanımlanmış değişkenler sadece o class altında kullanılabilirler. Son tanımlama ise protected olarak tanımlamadır. Protected değişkenler bulundukları class ve o class’ın extends edildiği class’larda kullanılabilirler. Extends olayına biraz sonra değineceğiz.

Standart bir tanımlama şu şekilde yapılabilir

1
2
3
4
5
6
7
8
class urun
{
  public $urunadi='Yok';
  function adiniyaz()
  {
    echo $this->urunadi;
  }
}

Bu tanımlamada aklınıza ilk takılacak olan hiçbiryerde adı geçmeyen $this değişkeni olabilir, bu değişken içinde bulunduğu nesneyi ifade eder yani siz urun sınıfını bir değişkene tanımladığınızda $this o an işlem yapan değişkenin ismidir. Daha kolay anlayabilmeniz için oluşturduğumuz bu sınıf için bir tanımlama yapalım

1
2
3
$yeniurun = new urun();
$yeniurun->urunadi = 'Htc One';
$yeniurun->adiniyaz();

Dediğimizde $yeniurun değişkenimizi bir ürün sınıfı olarak atamış olduk ve bu sınıf içerisindeki urunadi değişkenine bir string değer atadık ve sonrasında aynı sınıf içerisinde bulunan ilgili değişkeni ekrana yazdıran fonksiyonumuzu çağırdık.

Buraya kadar standart bir sınıf (class) nasıl tanımlanır ve temelinde hangi mantık vardır bunu anlamaya çalıştık artık biraz daha kullanımına yönelsek sanırım konuyu daha iyi bağlayabilmemiz için sağlıklı olacaktır.

İlk olarak sınıf tanımlamasının ilk adımında birşeylerin çalışması planlanıyor olabilir. Örneğin oluşturduğumuz bir class oluşturulma esnasında bir değer alabilmeli veya bu esnada bazı işlemleri gerçekleştirebilmeli. Php sınıf tanımalamlarında çalışacak ilk fonksiyon __construct() olarak adlandırılır (başında iki adet alt çizgi vardır). Örnek bir kullanım sunmak gerekirse:

1
2
3
4
5
6
7
8
9
10
11
12
class urun{
  private $oge = array('Samsung Note II', 'Samsung Galaxy S IV', 'Htc Butterfly');
  private $secili;
  function __construct($num){
    $this->secili = $this->oge[$num];
  }
  function yaz(){
    echo $this->secili;
  }
}
$yeniurun = new urun(1);
$yeniurun->yaz();

Örnektede göreceğiniz üzere ürünümüze direkt olarak ön tanımlı bir isimi oluştururken atadık siz bu alanda örnek olarak sql den verileri çektirebilirsiniz veya farklı işlemleri yaptırabilirsiniz. Çok kullanılmasada sınıf çıkışlarındada kullanılabilecek benzer bir fonksiyon vardır. Bu fonksiyon __destruct()şeklinde kullanılır ve çalışma mantığı bu class ‘ın sonlanması durumunda işlemek üzeredir. Bir örnekle açıklayacak olursak

1
2
3
4
5
6
7
8
9
10
11
12
13
class urun{  
  function __construct(){
    echo 'Başladı <br />';
  }
  function yaz(){
    echo 'Yazdı <br />';
  }
  function __destruct(){
    echo 'Bitti';
  }
}
$yeniurun = new urun;
$yeniurun->yaz();

Kodların çıktısını aldığımızda aşağıdaki gibi bir görüntü olacaktır.

1
2
3
Başladı
Yazdı
Bitti

Standart bir kullanımı görmüş olduk ancak eksik birşey var sınıfları vazgeçilmez yapan en önemli faktör kök sınıflar oluşturmamıza olanak sağlayan ve birbirini tekrarlayacak sınıfların önüne geçen extends yani mirasçı sınıf kullanımıdır. Bu sınıflar kendisine extends olan sınıf içerisinde tanımlı tüm fonksiyonlar ile private olmayan tüm değişkenleri kullanabilirler, böylelikle ayrı işlemler için aynı nesneyi tekrar tekrar oluşturmanıza gerek kalmayacaktır. Bir extends örneği vermeye çalışalım:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class urun{
  public $oge = array('Samsung Note II', 'Samsung Galaxy S IV', 'Htc Butterfly');
  private $secili;
  function ata($num){
    $this->secili = $this->oge[$num];
  }
  function yaz(){
    echo $this->secili;
  }
}
class duzenle extends urun
{
  function degistir($sira,$deger){
    $this->oge[$sira]=$deger;
  }
  function yazdir($sira)
  {
    $this->ata($sira);
    $this->yaz();
  }
}
$yeniurun = new duzenle;
$yeniurun->degistir(1,'Yeni Ürün');
$yeniurun->yazdir(0);
echo '<br />';
$yeniurun->yazdir(1);
echo '<br />';
$yeniurun->yazdir(2);

Şeklinde kullanımda ekran çıktısı aşağıdaki gibi olacaktır.

1
2
3
Samsung Note II
Yeni Ürün
Htc Butterfly

Biraz karışık gelmiş olabilir ancak örneklerle ilerlemeniz ve kendi örneklerinizi oluşturmanız öğrenmenizi/pekiştirmenizi hızlandıracaktır. Bir sonraki yazımızda/dersimizde görüşmek üzere..

Ahmet Yeşertener

Yorum Yaz