parent:: Anahtar Sözcüğü
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 22 / 91.
Bir alt sınıf bir üst sınıftan miras aldığında, bazen üst sınıfın yöntemlerine veya özelliklerine doğrudan erişmeniz gerekir. parent:: anahtar sözcüğü, alt sınıfın içinden üst sınıfın uygulamasını çağırmanıza olanak tanır.
Bu, özellikle alt sınıfın kendi özelliklerini ayarlarken üst sınıfın özelliklerini başlatması gerektiğinde kurucularda kullanışlıdır:
<?php
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
class Dog extends Animal {
public $breed;
public function __construct($name, $breed) {
parent::__construct($name);
$this->breed = $breed;
}
public function describe() {
return "$this->name is a $this->breed";
}
}
$dog = new Dog("Max", "Labrador");
echo $dog->describe();
Çıktı:
Max is a Labradorparent::__construct($name) çağrılarak alt sınıf, başlatma mantığını yeniden yazmak yerine üst sınıfın başlatma mantığını yeniden kullanır. Bu çağrı olmadan $name özelliği hiçbir zaman ayarlanmaz.
Yalnızca kurucuları değil, herhangi bir üst sınıf methodunu çağırmak için parent:: kullanabilirsin. Bu, bir methodun davranışını tamamen değiştirmek yerine genişletmek istediğinde özellikle önem kazanır.
Temel Nokta: parent:: anahtar sözcüğü, üst sınıfın uygulamasına erişmenin bir yolunu sağlar. Uygun kurucu zincirlemesi ve devralınan işlevselliği yeniden yazmak yerine onun üzerine inşa etmek için gereklidir.
Görev
Kolayparent:: anahtar sözcüğünü kullanarak alt sınıfların üst sınıf işlevlerini nasıl genişletebileceğini, kurucuları düzgün şekilde zincirleyip devralınan metotların üzerine nasıl ekleme yapılacağını gösteren bir ürün kataloğu sistemi oluşturalım.
Kodunuzu üç dosyaya ayıracaksınız:
Product.php: Tüm ürünlerin temelini oluşturan birProductsınıfı tanımlayın. Bu sınıfın$nameve$priceadlı herkese açık özellikleri olmalıdır. Kurucu, bir ad ve fiyat kabul ederek her iki özelliği ayarlamalıdır."[name]: $[price]"değerini döndüren birgetDetails()metodu ekleyin.ElectronicProduct.php:Productsınıfını genişleten birElectronicProductsınıfı tanımlayın. En üstte Product dosyasını dahil edin. Bu sınıf, bir$warrantyözelliği (ay cinsinden) ekler. Kurucu ad, fiyat ve garanti süresini kabul etmelidir: adı ve fiyatı üst sınıf üzerinden başlatmak içinparent::__construct()kullanın, ardından garanti süresini kendiniz ayarlayın. Üst sınıfın uygulamasını temel alan birgetDetails()metodu oluşturun:parent::getDetails()çağrısını yapın ve sonuna" (Warranty: [warranty] months)"ekleyin.main.php: ElectronicProduct dosyasını dahil edin. Üç girdi alacaksınız: ürün adı, fiyata dönüştürülecek bir dize olarak fiyat ve tam sayıya dönüştürülecek bir dize olarak garanti süresi. Bu değerlerle birElectronicProductoluşturun vegetDetails()çağrısının sonucunu yazdırın.
Bu alıştırma, parent:: anahtar sözcüğünün gerçek gücünü gösterir. Yalnızca kurucu zincirleme işlemi için değil, aynı zamanda metot davranışını genişletmek için de kullanılır. ElectronicProduct, üst sınıfın biçimlendirme mantığını yeniden kullanır ve üzerine kendi ayrıntılarını ekler; böylece kod tekrarından kaçınırken daha zengin bir çıktı oluşturur.
Kendin dene
<?php
require_once 'ElectronicProduct.php';
// Girdileri oku
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));
// TODO: Girdi değerleriyle bir ElectronicProduct oluştur
// ve getDetails() çağrısının 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