Konular

PHP Class (Sınıf) Yapısı

Sınıflar bir çok fonksiyonu bir düzene göre bir arada barındıran yapılardır. Belli bir konu ya da olayın fonksiyonlarını içerir ve belli bir amacı olduğu için sınıf kurulma ihtiyacı duyulur.

PHP Class (Sınıf) Yapısı

Bundan sonraki yazılarımda ağırlıklı olarak PHP frameworkleri ve PHP sınıfları göreceksin, bu yazıda bunların bir habercisi diyebilirim. Aslında fonksiyonlara ihtiyaç duymadan istediğin bir çok projeyi gerçekleştirebilirsin, kopyala-yapıştır özelliği olmadan da bir çok yazıyı tekrar tekrar yazabileceğin gibi.

Fakat fonksiyonlar sayesinde sıkça tekrar edilen kod bloklarını bir kere yazıp, istediğin yerde istediğin kadar kullanarak büyük bir kolaylık sağlıyorsun. Bu düşünce ile sadece fonksiyonlar kullanarak sınıf yapısına hiç girmeden de bir çok projeni gerçekleştirebilirsin… Son cümlem ile yukarıda kullandığım cümleyi çağrıştıracak olursan sınıf yapısınında ne derece gerekli ve etkili olacağını hesaplayabilirsin.

Yani bir yazılımda fonksiyonlar ne kadar avantaj ve zaman kazandırıyorsa, sınıflarda bu kazancın bir sonraki leveli gibi. sınıflardan sonrada bir çok level mevcut ve bu neredeyse hiç kod yazmamaya kadar gidiyor.

PHP class nedir?

Sınıflar bir çok fonksiyonu bir düzene göre bir arada barındıran yapılardır. Belli bir konu ya da olayın fonksiyonlarını içerir ve belli bir amacı olduğu için sınıf kurulma ihtiyacı duyulur. Mesela bir toplama işlemi için sınıf tanımlamamıza gerek yok, ama bir üyelik ya da alışveriş sepeti için sınıf hazırlayabilirsin.

Üyelik örneğinden gidelim, üyelik sınıfında üye ekleme, silme, düzenleme ve listeleme fonksiyonları olur. Sadece bir üyelik sınıfı ile tüm bu üyelik fonksiyonlarına ulaşabilirsin. Sadece bir arada ulaşmanın da dışında aynı zamanda fonksiyonların arasında sınıf içinde veri transferi de sağlayabilirsin.

Verdiğim üyelik örneği üzerine bir üyelik sınıfı hazırlayayım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class uyeler {
   public $veriler;
   function ekle($ad, $soyad) {
      $this->veriler[] = array('ad' => $ad, 'soyad' => $soyad);
   }
 
   function duzenle($no, $ad, $soyad) {
      if(!isset($this->veriler[$no])) return false; // eğer yoksa olumsuz
      $this->veriler[$no] = array('ad' => $ad, 'soyad' => $soyad);
      return true;
   }
 
   function sil($no) {
      unset($this->veriler[$no]);
   }
 
   function listele() {
      foreach($this->veriler as $no => $uye) {
         echo $no . ' - ' . $uye['ad'] . ' ' . $uye['soyad'] . '<br/>';
      }
   }
}

Eğer bu sınıf yapısını ilk görüşün ise öncelikle $this değişkenini tanıştırmakla başlayabilirim. Fonksiyonların içinde çağırdığımız $this, o sınıf içersinde tanımlanmış bir global değişken gibidir. Nasıl bir fonksiyonların içinde kullanılan değişkenler sadece kendi içlerinde varlarsa, tüm sınıfın içerisinde varolması istenen değişkenlerde bu $this değişkeni üzerinde barındırılır.

1
2
3
4
5
$liste = new uyeler();
$liste->ekle('Musa', 'Avcı'); // 0 nolu üye eklendi
$liste->ekle('Bill', 'Gates'); // 1 nolu üye eklendi
$liste->duzenle(0, 'Mehmet', 'Yılmaz'); // 0 nolu üye düzenlendi
$liste->sil(1);

Buradaki örnektede yukardaki “uyeler” sınıfını kullandım, tüm bir sınıfı $liste adında bir değişkene yükledim ve tüm bu içeriği sadece o değişken üzerinden kontrol edebilirim. Ayrıca bir diğer espiriside aynı sınıftan birden fazla oluşturabiliyor olmamız.

1
2
3
4
5
$ogrenci = new uyeler();
$sanatci = new uyeler();
// ...
$ogrenci->ekle('Musa', 'Avcı');
$sanatci->ekle('Barış', 'Manço');

Aynı sınıfı iki bağımsız değişken üzerinde tanımlayarak her birinde ayrı işlem yapabilir ve sonra istediğimizin verilerine ulaşabiliriz.

Sınıfların yapıcı ve yıkıcı metodları

Bir sınıf oluştururken eğer o sınıfın içine aynı isimde bir metod tanımlarsak bu aynı zamanda o sınıfın yapıcı metodu olur. Yapıcı metod sınıf ilk oluşturulmak istendiğinde otomatik çağrılır, yani “new class()” denildiğinde. Metodun aynı adını kullanmak yerine “__construct” şeklinde de yazabilirsiniz.

1
2
3
4
5
6
7
class deneme {
   function deneme() {
      echo 'Sınıf yapıcısı çalıştı!';
   }
}
 
$deneme = new deneme();

Ekranda “Sınıf yapıcısı çalıştı!” yazar. Ayrıca bu metoda ekleyeceğimiz parametreler sınıf ilk çağrıldığında kullanılabilir.

1
2
3
4
5
6
7
8
9
10
11
12
class kedi {
   function kedi($isim) {
      $this->isim = $isim;
   }
 
   function miyav() {
      echo $this->isim . ': Miyav!';
   }
}
 
$kedi = new kedi('Çomar');
$kedi->miyav();

Ekranda “Çomar: Miyav!” yazar.

Yıkıcı metodu “__destruct” sınıfın yok edileceği sıra çalışır, bu genellikle tüm ifadelerden sonra gerçekleşir. Kullanımına örnek vermek gerekirse bir veritabanı sınıfında yıkıcı metoda veritabanı ile bağlantısını kesme komutunu verebilirsiniz, fakat bu işlemi normal bağlantılarda PHP otomatik olarak yapmaktadır.

1
2
3
4
5
6
7
8
9
10
11
class deneme {
   function __destruct() {
      echo 'Sınıf yok ediliyor.';
   }
 
   function deneme() {
      echo 'Selam Dünya!';
   }
}
 
$deneme = new deneme();

Ekranda “Selam Dünya! Sınıf yok ediliyor.” yazar.

Sınıfların miras alınması

Bir çok dilde de extends ifadesiyle gerçekleşen miras olayı ise adı üzerinde bir sınıfa miras alınan sınıfın metodlarını ve değerlerini dahil eder.

Ben bunun rahat anlaşılması için yine bir üye sınıfı ve bu sınıfı miras alan öğrenci ve öğretmen sınıfları yapacağı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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class uye {
   public $ad;
   public $soyad;
 
   function isim($ad, $soyad) {
      $this->ad = $ad;
      $this->soyad = $soyad;
   }
 
   function isim_yaz() {
      echo $this->ad . ' ' . $this->soyad;
   }
}
 
 
class ogrenci extends uye { // uye sınıfını miras aldık
   public $sinif;
 
   function sinif($sinif) {
      $this->sinif = $sinif;
   }
 
   function sinif_yaz() {
      echo 'Sınıf: ' . $this->sinif;
   }
}
 
class ogretmen extends uye { // uye sınıfını miras aldık
   public $ders;
 
   function ders($ders) {
      $this->sinif = $ders;
   }
 
   function ders_yaz() {
      echo 'Ders: ' . $this->ders;
   }
}
 
$ogrenci = new ogrenci();
$ogrenci->isim('Ahmet', 'Yılmaz'); // bu metod uye sınıfından miras.
$ogrenci->sinif('12-A'); // bu ise ogrenci sınıfına ait metod.
 
$ogretmen = new ogretmen();
$ogretmen->isim('Mehmet', 'Çetin'); // bu metod uye sınıfından miras.
$ogretmen->ders('Türkçe'); // bu ise ogretmen sınıfına ait metod.

üye” sınıfında olan isim metodu, hem “öğrenci” hem de “öğretmen” sınıflarında kullanılacak bir metod olduğu için o sınıflarda da benzer metodlar tanımlamak yerine “üye” sınıfını miras alarak o sınıfın bünyesine dahil etmiş olduk.

Sınıf değerlerinin görünürlüğü

Sınıfları ifade ederken ilk satırlarına yazdığımız değerler yukarıda da bahsettiğim gibi tüm sınıf içerisinde $this değişkeni ile ulaşılabilen değerlerdir. Bu değerlere public, private ve protected adında 3 farklı görünürlük tanımlayabiliyoruz.

“public” dediğimizde o değişkene sınıf dışarısından da erişime izin vermiş oluyoruz.

1
2
3
4
5
6
7
8
9
10
class uye {
   public $isim; // herkese açık değer
 
   function uye($isim) {
      $this->isim = $isim;
   }
}
 
$uye = new uye('Musa');
echo $uye->isim; // sınıf içerisindeki değişkene ulaştık.

Bu kullanımda herhangi bir hatayla karşılaşmazken “private” ya da “protected” dediğimizde dışarıdan ulaşılmaya çalışıldığında hata verir. Bunların kullanımına örnek olarak eğer dışarıdan değiştirilmesini ya da okunmasını istemediğiniz ve sadece sınıf içerisinde işlemler yapmak için tutacağınız şifre gibi değerlerde tutabilirsiniz.

“private” ve “protected” farkı ise private dediğimizde bu sınıfı miras alan (extends eden) alt sınıflara bu değerin ulaşmaması sağlanıyor. “protected” de ise sadece dışarıdan ulaşılması engelleniyor, alt sınıflardan ulaşılabilir.

Metod zincirleme

Bu pratik yöntem sayesinde art arda metodlar çağırabilirsiniz. Tek yapmanız gereken zincirleme metod yapmak istediğiniz metodda sonuç olarak “return $this;” demek. Bu sayede metod çağırıldıktan sonra sonuç olarak kendisini yani sınıfı döndürecek ve biz tekrar metod çağırmaya devam edeceğiz.

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
class islem {
   public $sonuc = 0;
 
   function topla($sayi) {
      $this->sonuc = $this->sonuc + $sayi;
      return $this;
   }
 
   function carp($sayi) {
      $this->sonuc = $this->sonuc * $sayi;
      return $this;
   }
 
   function sonuc() {
      echo $this->sonuc;
   }
}
 
$x = new islem();
$x->topla(5)->carp(10)->sonuc();
// ekranda 50 yazar.
 
// normal yolla yapsaydık her seferinde $x tekrar ifade etmemiz gerekirdi
$x->topla(5);
$x->carp(10);
$x->sonuc();

 

Kaynak

Yorumunuzu Ekleyin

Kurallı İfadeler (regex Engine)

Bir regex'in gerçekte nasıl çalıştığını bilmek daha efektif çalışan regex ifadeleri oluşturmamızı ve regex'leri daha isabetli oluşturmamızı sağlar. Bu yazımızda oluşturduğunuz regex ifadelerinin neden beklediğiniz sonuçları vermediğini ve umduğunuz eşleşmeleri yerine getirmediğini öğreneceksiniz. Bu da bizim tabir yerindeyse daha az kafa patlatmamızı ve daha az zaman harcamamızı sağlayacaktır.

43,156 Okunma 1 Yorum 14/07/2007 05:23:11

Nesneye Yönelimli Php

Classlarla ilgili ingilizce bir makale

35,826 Okunma Henüz yorum yapılmamış 06/01/2008 11:24:59

PHP ile PDF dosya oluşturmak

Php ile yeni bir pdf dosyası oluşturmak : Öncelikle php ile pdf işlemleri yapmak için bir pdf kütüphanesine ihtiyacınız olacak

34,559 Okunma Henüz yorum yapılmamış 06/09/2007 01:22:38

PHP nedir?

HTML kodlarının arasına yerleştirilmiş php kodlarından ayrıştırıp işleyerek sonuçta saf HTML formatında bir çıktı üretmek ve Web sunucusuna iletmektir.

33,724 Okunma Henüz yorum yapılmamış 26/09/2011 14:50:52

$_FILES

Örnek kod ve açıklamalar

33,214 Okunma 4 Yorum 30/12/2007 13:36:25

Oop - Nesne Yönelimli Programlama

Artık ister istemez her programcının bulaştığı bu teknik hakkında sayısız makale yazılmıştır bu güne kadar. Bu makale de onlardan biri

27,070 Okunma 1 Yorum 06/01/2008 11:26:55

Php ile Oturum Yönetimi (SESSION)

Türkçesi oturum anlamına gelen session bilgilerin saklanması için kullanılan mantıksal bir nesnedir.Session oturum yönetimini kullanarak şifreli sayfalar oluşturarak ve bu sayfaları belirlediğiniz kullanıcıların görmesini sağlayabilirsiniz.

27,008 Okunma Henüz yorum yapılmamış 22/05/2013 16:29:40 22/05/2013 16:29:55

$_SERVER

$_SERVER host bilgileri, header bilgileri, yollar ve script yolları gibi bilgileri içeren bir dizidir. Bu dizideki değerler web server tarafından üretilir. Tüm server yazılımlarının, tüm değerleri atayacağına dair bir kesinlik yoktur. Yazılım bazılarını atamayabilir, veyahut burada anlatılacak değerlerin haricinde değerler ekleyebilir

26,984 Okunma Henüz yorum yapılmamış 23/10/2007 00:51:55

Xampp Kurulumu

Xampp apache, mysql, php ve phpmyadmin için kolay ve basit kurulum sağlayan bir uygulamadır.

25,888 Okunma Henüz yorum yapılmamış 19/12/2011 10:00:36

Verileri doğrulamak için PHP ile filtreleme işlemleri

Ziyaretçilerden gelen verilerin istediğimiz formata uygunluğunu kontrol etmeliyiz ki, güvenlik açığı yaratmayalım. E-postaları, web adreslerini, bilgi girişlerini ve dahasını Her birine uygun farklı fonksiyonlar yazıldı bu vakte kadar. Ancak PHP 5.2.0 ve üstü sürümlerde bu fonksiyonlara gereksinim azaldı. Çünkü PHP filtreleme fonksiyonları standart oldu.

25,145 Okunma Henüz yorum yapılmamış 02/12/2008 04:19:24

Php İle Excel Dosyası Oluşturmak

Genelde, herhangi bir biçimlendirme söz konusu olmadığında, veritabanındaki bir bilgiyi ya da başka bir tabloyu excel ortamına aktarmak için csv yöntemini kullanırım. Bu yöntem herkesin bildiği gibi, her sütunu tab ya da noktalı virgül gibi bir karakterle ve her satırı da enter karakteri ile bölmekten ibaret. Ama biçimlendirme söz konusu olduğunda, mesela sütunlara bir genişlik vermek, yazıları bold yapmak, bazı hücreleri sayı ya da para tipine çevirmek gibi biçimlendirmelerde bu yöntem işe yaramamakta.

24,926 Okunma 1 Yorum 22/07/2008 01:35:17

$_ENV

24,713 Okunma Henüz yorum yapılmamış 31/12/2007 09:46:00

En iyi 25 php template motoru

Php tabanlı web siteleri dizayn ederken, php kodlarını html kodlar arasına gömeriz. Fakat gün gelir bu kodları düzenlemek istediğimizde çok büyük bir çaba gerektirir. Bu tarz durumlarla başa çıkabilmek için ve daha kararlı bir sistem kodlamak için tema sistemleri geliştirebilirsiniz. Tema sistemi ya da motorlarının asıl amacı, php kodları ile html kodlarını birbirinden ayırmaktır. Böylece hangi kod üzerinde değişiklik yapmanız gerekiyorsa, kendisine ait dosyalarını açarak bu işlemi gerçekleştirebilirsiniz

24,500 Okunma Henüz yorum yapılmamış 16/02/2008 01:35:10

Php Mysql to XML

Bu yapıyı geliştirerek mysql veritabanınızdaki datalarınızı xml standartlarına dönüştürebilirsiniz.

24,069 Okunma Henüz yorum yapılmamış 05/10/2008 01:56:47

Dizi Tanımlamaları

PHP’de array tanımlayıcısını kullanarak içerisinde elemanları yerleştirmek yoluyla ya da index numarasını köşeli parantezler içerisinde belirterek atama yaparak dizi oluşturmak mümkündür

23,776 Okunma Henüz yorum yapılmamış 23/10/2007 00:36:18

Harici Dosya İnclude

İnclude kullanımı ve örnekler

23,651 Okunma Henüz yorum yapılmamış 14/04/2008 01:42:12

$_REQUEST

$_GET, $_POST, ve $_COOKIE değişkenlerini içeriğinden meydana gelen çağrışımlı bir dizidir. Bu değişken bir superglobal olduğu için tüm alanlarda (scope) geçerlidir ve bundan dolayıdır ki global $_REQUEST ; şeklinde bir tanımlamaya ihtiyaç duymaz. Eğer register_globals değişkeni php. İni de ayarlanmışsa bu değişken her yerde (Global Scope) kullanılabilir

22,583 Okunma Henüz yorum yapılmamış 24/12/2007 00:16:58

if Kullanımı

20,398 Okunma Henüz yorum yapılmamış 09/04/2012 10:31:35 20/09/2014 18:01:36

Yükleniyor...