extends
sözcüğü
Çoğunlukla başka başka sınıflar içinde benzer değişkenler ve işlevler
kullanmak gerekir. Aslında, belli projelerin ihtiyaçlarına göre
uyarlanabilecek genel bir sınıf tanımınız olsa fena olmazdı. Bunu
sağlamak için, sınıflar başka sınıfları genişleterek tanımlanabilir.
Genişletilmiş veya türetilmiş sınıflar ana sınıfla ortak değişken ve
işlevlere (aslında bunlar kalıtsal niteliklerdir) ek olarak kendi işlev
ve değişkenleri olan sınıflardır. Miras alınan değişken ve işlevleri
tanımsız yapmak mümkün değildir. Bir türetilmiş sınıf daima tek bir ana
sınıfa bağımlıdır, yani çoklu kalıtım desteklenmemektedir. Sınıflar
extends
anahtar sözcüğü kullanılarak türetilirler.
<?php
class Sahipli_Sepet extends Sepet {
var $sahibi;
function sahip_ata ($isim) {
$this->sahibi = $isim;
}
}
?>
Bu örnekte, Sepet sınıfının tüm değişken ve işlevlerine ek olarak $sahibi değişkenine ve sahip_ata işlevine sahip Sahipli_Sepet sınıfı tanımlanmaktadır. Böylece sahipli bir sepet oluşturabilir ve sepetleri sahibine göre bir araya toplayabilirsiniz. Ayrıca, normal sepetin işlevlerini sahipli sepette de kullanabilirsiniz:
<?php
$ssepet = new Sahipli_Sepet; // sahipli bir sepet oluşturalım
$ssepet->sahip_ata("enis"); // sepetin sahibi
print $ssepet->sahibi; // sepet sahibinin ismini basar
$ssepet->mal_ekle("10", 1); // (işlevsellik Sepet sınıfının mirasıdır)
?>
Buna ebeveyn-çocuk ilişkisi de denir. İlk oluşturduğunuz sınıfa ebeveyn sınıf dersek, extends sözcüğünü kullanarak ondan türettiğiniz sınıflar çocuk sınıflar olur. Bu yeni çocuk sınıfları başka çocuk sınıfları (yani ilk sınıfın torunlarını) türetmek için kullanabilirsiniz.
Bilginize:
Sınıfların kullanılmadan önce tanımlanmış olmaları gerekir. Sahipli_Sepet sınıfını Sepet sınıfından türetmek için önce Sepet sınıfını tanımlamanız gerekir. Kurumsal_Sahipli_Sepet sınıfını Sahipli_Sepet sınıfından türetmek için de önce Sahipli_Sepet sınıfını tanımlamanız gerekir. Kısaca: Sınıfların tanımlanma sırası önemlidir.