Php Kalıtım Nedir? – OOP Dersleri
Kalıtım sadece php ye özel bir konu olmayıp OOP yapısını destekleyen bütün programlama dillerinde vardır. Kalıtım diğer bir adıyla inheritance veya miras alma olarak karşımıza çıkabiliyor. Kafamıza en yatkın miras alma ismiyle devam edelim. Günlük hayatta miras nedir nasıl miras alırız bilmeyen yoktur heralde (Klasik babamın malı benim malım mantığı). Kalıtımda da ana sınıfımız baba, Kalıtacağımız, miras alacağımız sınıf ise çocuk oluyor.
Neden Kalıtım Yaparız ?
Peki neden kalıtım yaparız ? Örneğin bir öğrenci bilgi sistemi yazdığımızı düşünelim. Ö.b.s’ de hocalar ve öğrenciler diye iki adet sınıfımız olsun. Bu iki sınıfın temel özelliği genel anlamda bir kişiyi temsil etmesidir. Yani öğrencide bir kişidir hoca da. Biz burada kişi diye bir sınıf oluşturursak öğrenci ve öğretmeni bu sınıftan miras alarak oluşturabiliriz.
Kalıtımda miras alınarak oluşturulan sınıflar ana sınıfın metotlarını ve değişkenlerini kullanabilirler. Bir önceki dersimizde public, private, protected anahtar kelimelerinin ne işe yaradığını söylemiştik. Dersi okumayanlar Buradan okuyabilirler.
Not: Php de bir sınıftan kalıtım yapmak için extends anahtar kelimesi kullanılır.
Örneğin: class Kalitilan extend Kalitilacak
Kullanacağımız bazı anahtar kelimeler:
self: Bulunduğumuz sınıfı işaret eder. $this ile aynıdır ama $this static methodlarda çalışmazken self statik methodlarda çalışır. Php 5 sürümünden sonra self yerine static kullanılması öneriliyor.
static: static anahtar kelimesi static methodlar içerisinde $this yerine kullanılır.
parent: Miras aldığımız sınıfta ana sınıfın izin verilen özelliklerine erişebilmemizi sağlar.
const: Değeri değiştirilemeyen, sabit bir değişken oluşturmamızı sağlar.
extends: Ana sınıftan yeni bir sınıf kalıtır.
Şimdi basitçe söylediğimiz örneği yapalım konu daha anlaşılır olsun.
class kisi { // değişkenlere sınıf dışından ulaşılamasın private $adSoyad; private $tc; // yapıcıya her yerden ulaşılsın. public function __construct($adSoyad,$tc) { $this->adSoyad = $adSoyad; $this->tc = $tc; } // fonksiyonlara kalıtılan sınıflar ulaşabilsin. protected function getAdSoyad() { return $this->adSoyad; } protected function getTc() { return $tc; } protected function setAdSoyad($adSoyad){ $this->adSoyad = $adSoyad; } protected function setTc($tc){ $this->adSoyad = $tc; } // bilgileri dışardan yazdırabilelim. public function bilgiYazdir() { echo "Ad Soyad: $this->adSoyad | Tc: $this->tc"; } } $kisi = new Kisi("Uğur Işık",11111); $kisi->bilgiYazdir();
Kişi sınıfımızı yazdık, method ve değişkenler için gerekli anahtar kelimeleri verdik. Testimizi yaptığımızda sınıfımızın çalıştığını da görürsünüz.
Şimdi öğrenci sınıfı oluşturalım ve kişi sınıfından extend edelim.
// öğrenci sınıfı class Ogrenci extends kisi { // extra gelen özellik. Öğrenci Numarası ekledik. private $ogrenciNo; public function __construct($adSoyad,$tc,$ogrNo) { $this->ogrenciNo = $ogrNo; parent::__construct($adSoyad,$tc); // genel sınıfımızın yapıcısını çağırdık. } public function getOgrNo() { return $this->ogrenciNo; } public function setOgrNo($ogrNo) { $this->ogrenciNo = $ogrNo; } public function ogrenciBilgiYazdir() { echo " | Öğrenci No: $this->ogrenciNo ".parent::bilgiYazdir(); } } $ogrenci = new Ogrenci("Uğur Işık",11111,22); $ogrenci->ogrenciBilgiYazdir();
Öğrenci sınıfımızı da yazıp test ettiğimizde öğrenci bilgilerimizinde yazdığını görürüz. Şimdi Öğretmen sınıfımızı hazırlayalım.
class Ogretmen extends kisi{ private $ogretmenNo; private $ogrenciler = array(); // burada hocaya ait öğrenci ekleyelim. public function __construct($adSoyad,$tc,$ogrNo) { $this->ogretmenNo = $ogrNo; parent::__construct($adSoyad,$tc); // genel sınıfımızın yapıcısını çağırdık. } public function getOgrNo() { return $this->ogretmenNo; } public function setOgrNo($ogrNo) { $this->ogretmenNo = $ogrNo; } public function ogrenciEkle($ogrenci) { $this->ogrenciler[] = $ogrenci; } public function ogrenciListele() { foreach($this->ogrenciler as $ogrenci) { echo $ogrenci->bilgiYazdir()." <br/>"; } } } $ogrenci1 = new Ogrenci("Uğur Işık",1111,25); $ogrenci2 = new Ogrenci("Ali Balcı",123123,26); $ogrenci3 = new Ogrenci("Ayhan Başaran",145151,27); $ogrenci4 = new Ogrenci("Alper Ekler",155445,28); // 4 adet öğrenci ekledik. $ogretmen1 = new Ogretmen("YazilimDelisi",123456,1); $ogretmen2 = new Ogretmen("yazilimdelisi.com",1234567,2); // öğretmen 1 e 4 öğrenci ekledik. $ogretmen1->ogrenciEkle($ogrenci1); $ogretmen1->ogrenciEkle($ogrenci2); $ogretmen1->ogrenciEkle($ogrenci3); $ogretmen1->ogrenciEkle($ogrenci4); // öğretmen 2 ye iki öğrenci ekledik $ogretmen2->ogrenciEkle($ogrenci3); $ogretmen2->ogrenciEkle($ogrenci4); //Şimdi bilgileri yazdıralım echo "1. Öğretmenin Öğrencileri <br/>"; $ogretmen1->ogrenciListele(); echo "<br/><br/>2. Öğretmenin Öğrencileri <br/>"; $ogretmen2->ogrenciListele();
Kodları yazıp çalıştırdığımızda aşağıdaki gibi bir çıktı alırız.

Peki Amaç Neydi ?
Evet arkadaşlar uğraştık birşeyler yaptık çalıştırdık ama elimize ne geçti ?
- Kod kalabalığından kurtulduk. Öğrenci ve öğretmen için tekrar tekrar ad soyad fonksiyonları yazmadık.
- Yeni bir sınıf oluşturmak istersek: Örneğin Müdür adında bir sınıf oluşturmak istersek elimizde kişi sınıfı olduğu için yine kişi sınıfından kalıtarak sadece müdüre özel methodlar ekleyerek işimizi kolaylaştırabiliriz.
- Kod okunurluğumuzu artırmış olduk.
Aklıma geldiği kadar amacımızı yazdım arkadaşlar maddeler eklenebilir.
Konuyla ilgili yorumlarınızı, görüş ve önerilerinizi konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altındaki yorum bölümünden sorabilirsiniz.
PHP kalıtım – OOP Dersleri konusunu bu yazımızda gördük. Aşağıdaki linke tıklayarak daha bir çok içeriğe ulaşarak bilginizi artırabilirsiniz. Ayrıca aşağıdaki Sosyal Medya linklerine tıklayarak bizi Sosyal Medya üzerinden de takip edebilirsiniz.
https://yazilimdelisi.com/category/web-gelistirme/php/