Temel Kalıtım
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 21 / 91.
Kalıtım, bir sınıfın başka bir sınıftan özellikleri ve yöntemleri edinmesini sağlar. Aynı kodu yeniden yazmak yerine, ortak işlevlere sahip bir temel sınıf oluşturabilir ve diğer sınıfların bu sınıftan kalıtım almasını sağlayabilirsiniz.
Miras alınan sınıfa üst sınıf (veya temel sınıf), miras alan sınıfa ise alt sınıf denir. Bu ilişkiyi kurmak için extends anahtar sözcüğünü kullanırsınız:
<?php
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
return "$this->name makes a sound";
}
}
class Dog extends Animal {
public function fetch() {
return "$this->name fetches the ball";
}
}
$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();
Çıktı:
Buddy makes a sound
Buddy fetches the ballDog sınıfı, Animal sınıfındaki $name özelliğine, yapıcı metoda ve speak() metoduna otomatik olarak erişebilir. Ayrıca yalnızca köpeklerin sahip olduğu kendi fetch() metodunu da tanımlar.
Bu, net bir hiyerarşi oluşturur: her köpek bir hayvandır; bu nedenle Dog sınıfının Animal sınıfından miras alması mantıklıdır. Alt sınıf, kendi özelleştirilmiş davranışlarını eklerken üst sınıftaki her şeyi kullanabilir.
Temel Nokta: Kalıtım, kodun yeniden kullanılmasını teşvik eder ve sınıflar arasında mantıksal ilişkiler kurar. Alt sınıf, üst sınıftaki tüm public ve protected üyeleri devralarak tekrarı azaltır ve kodunuzun bakımını kolaylaştırır.
Görev
KolayAlt sınıfların bir üst sınıftaki işlevleri paylaşırken kendi özel davranışlarını eklemesini sağlayan kalıtımı gösteren bir araç hiyerarşisi sistemi oluşturalım.
Kodunuzu üç dosyaya ayıracaksınız:
Vehicle.php: Tüm araçlar için üst sınıf görevi gören birVehiclesınıfı tanımlayın. Bu sınıf, herkese açık bir$brandözelliğine ve markayı kabul edip ayarlayan bir kurucuya sahip olmalıdır."[brand] is starting"döndüren birstart()yöntemi ve"[brand] is stopping"döndüren birstop()yöntemi ekleyin.Motorcycle.php:Vehiclesınıfını genişleten birMotorcyclesınıfı tanımlayın. En üstte Vehicle dosyasını dahil edin. Motorcycle sınıfının kendi kurucusuna ihtiyacı yoktur; çünkü üst sınıfın kurucusunu miras alacaktır."[brand] is doing a wheelie!"döndüren birwheelie()yöntemi ekleyin. Bu, motosikletlere özgü bir davranıştır.main.php: Zaten Vehicle dosyasını dahil eden Motorcycle dosyasını dahil edin. Bir girdi alacaksınız: motosiklet markası. Bu markayla birMotorcyclenesnesi oluşturun.start(), ardındanwheelie()ve son olarakstop()çağrılarının sonuçlarını yazdırın; her biri kendi satırında olmalıdır.
Motorcycle sınıfının $brand özelliğini, kurucuyu ve hem start() hem de stop() yöntemlerini Vehicle sınıfından otomatik olarak miras aldığına dikkat edin. Alt sınıfın yalnızca onu benzersiz kılan özelliği, bu durumda tekerlek kaldırabilme becerisini tanımlaması gerekir. Kalıtımın gücü budur: ortak işlevleri üst sınıfta bir kez yazın ve alt sınıfların kendi özelleştirmelerini eklerken bunları yeniden kullanmasına izin verin.
Kendin dene
<?php
// Motorcycle sınıfını dahil et (zaten Vehicle'ı içerir)
require_once 'Motorcycle.php';
// Girdiyi oku
$brand = trim(fgets(STDIN));
// TODO: brand ile bir Motorcycle nesnesi oluştur
// TODO: start() sonucunu yazdır
// TODO: wheelie() sonucunu yazdır
// TODO: stop() sonucunu yazdır
?>Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi