class
sözcüğü
Bir sınıf, değişkenlerden ve bu değişkenlerle çalışan işlevlerden oluşan
bir bütündür. Değişkenler var anahtar sözcüğüyle
belirtilir, işlevler ise function ile tanımlanır. Bir
sınıf şöyle bir söz dizimi ile tanımlanır:
Bu örnekte, sepetteki malları içeren bir ilişkisel dizi ile sepete
malları ekleyip çıkarmak için iki işlevden oluşan Sepet sınıfı
tanımlanmaktadır.
Uyarı
Bir sınıf tanımını birden fazla dosyaya yayamayacağınız gibi yöntem
bildirimi dışında birden fazla PHP bloğuna da bölemezsiniz. Aşağıdaki
örnek çalışmayacaktır:
Ancak, buna izin verilir:
Aşağıdaki Dikkat bölümleri PHP 4 içindir.
Dikkat
stdClass ismi Zend tarafından yerleşik sınıf ismi
olarak ayrılmıştır. stdClass ismini kendi
sınıflarınızda kullanamazsınız.
Dikkat
__sleep ve __wakeup işlev
isimleri PHP sınıfları için sihirlidir. Bunlarla ilgili sihirli
işlevselliğe ihtiyacınız olmadığı sürece bu işlev isimlerini
sınıflarınızın içinde kullanamazsınız. Daha ayrıntılı bilgi için
belgenin devamına bakınız.
Dikkat
PHP, __ ile başlayan tüm işlev isimlerini kendi
yerleşik işlev isimleri için ayırmıştır. PHP'de özellikle belgelenmiş
sihirli işlevselliğe ihtiyacınız olmadığı sürece böyle işlev isimleri
kullanmanız önerilmez.
PHP 4'te var değişkenlerinin sadece sabitlerle
ilklendirilmesine izin verilir. Değişkenleri sabit olmayan değerlerle
ilklendirmek isterseniz, sınıf bir nesne olarak örneklendiği anda
kendiliğinden çağrılan bir ilklendirici işlev üzerinden bunu
yapabilirsiniz. Bu ilklendirici işleve kurucu işlev denir (aşağıya
bakınız).
Sınıflar veri türleridir, yani asıl değişkenlerin örüntüsüdürler. Bu tür
bir değişkeni new işleci ile oluşturabilirsiniz.
Bu örnekte, Sepet sınıfından $sepet ve
$diger_sepet diye iki nesne oluşturulmakta ve
$sepet nesnesinin mal_ekle işlevi
ile $sepet'e "10" numaralı malzemeden 1 adet,
$diger_sepet'e de "0815" numaralı malzemeden 3 adet
eklenmektedir.
$sepet ve $diger_sepet
nesnelerinin ikisi de mal_ekle ve
mal_sil işlevleri ile mallar
değişkenine sahiptir. Bunlar isimleri aynı olsa da birbirlerinden
bağımsız işlev ve değişkenlerdir. Nesneleri, bir dosya sisteminin
dizinleri olarak düşünebilirsiniz. Bir dosya sisteminde ayrı ayrı
dizinlerde BENi.OKU adında iki farklı dosyanız
olabilir. Bu dosyalara kök dizinden ayrı ayrı erişmek isterseniz
dosyaların tam yollarını yazmanız gerekir. Tıpkı bunun gibi PHP'de de
bir nesne işlevini çağırmak için istediğiniz işlevin tam yolunu yazmanız
gerekir. İşlemi PHP'ye tercüme edersek: Kök dizin, küresel alana; dosya
yolu ayracı, -> ayracına karşılıktır. Dolayısıyla,
$sepet->mallar ile
$diger_sepet->mallar iki ayrı değişkendir. Burada
şuna dikkat edin: Değişkenin ismi
$sepet->mallar'dır,
$sepet->$mallar değildir. PHP
$sepet->$mallar dizgesini $ imli
iki değişken ismi olarak ele alır.
Bir sınıf tanımı içinde, betiğinizin neresinden hangi nesne ismiyle bu
sınıfın örnekleneceğini bilemezsiniz. Yani, Sepet
sınıfının yazıldığı sırada bu sınıfın $sepet veya
$diger_sepet ya da başka bir isimle örnekleneceği
kararını henüz vermemişsinizdir. Bu bakımdan, Sepet
sınıfının içinde $sepet->mallar diye bir değişken
ismi kullanamazsınız. Sınıfın kendi işlev ve değişkenlerine erişirken bu
amaçla 'benim', 'geçerli nesnem' anlamında $this sözde
değişkeni kullanılır. Bu bakımdan '$this->mallar[$malnum] +=
$adet;' deyimi, "(benim) mallar dizimin $malnum
elemanına $adet değerini ekle" veya "geçerli nesnenin
mallar dizisinin $malnum elemanına
$adet değerini ekle" olarak okunabilir.
Bilginize:
$this sözde değişkeni sınıfın kendi yöntemi duruk
olarak çağrıldığı takdirde tanımlı değildir. Ancak bu,
"$this, bir yöntem başka bir nesnenin içinden duruk
olarak çağrıldığında tanımlıdır." tarzında anlaşılmamalıdır. Böyle bir
durumda $this'in değeri çağrıldığı nesne olacaktır.
Bunu bir örnekle pekiştirelim:
Bilginize:
Sınıflar ve nesnelerle çalışırken kullanışlı olabilen bazı işlevler
vardır. Bunları Sınıf/Nesne
İşlevleri bölümünde bulabilirsiniz.