parent:: Anahtar Kelimesi
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 metotlarına veya özelliklerine doğrudan erişmeniz gerekir. parent:: anahtar kelimesi, üst sınıfın uygulamasını alt sınıfın içinden çağırmanıza olanak tanır.
Bu, özellikle alt sınıfın (child) kendi özelliklerini ayarlarken aynı zamanda üst sınıfın (parent) özelliklerini de başlatması gerektiği durumlarda, yapıcı metotlarda (constructors) oldukça 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) ifadesini çağırarak, alt sınıf üst sınıfın başlatma mantığını çoğaltmak yerine yeniden kullanır. Bu çağrı olmadan, $name özelliği asla ayarlanmazdı.
Sadece yapıcıları değil, herhangi bir üst sınıf metodunu çağırmak için parent:: kullanabilirsiniz. Bu, bir metodun davranışını tamamen değiştirmek yerine genişletmek istediğinizde özellikle önemli hale gelir.
Önemli Nokta: parent:: anahtar kelimesi, üst sınıfın uygulamasına erişmek için bir yol sağlar. Doğru yapıcı zincirleme (constructor chaining) ve devralınan işlevselliği yeniden yazmak yerine üzerine inşa etmek için gereklidir.
Görev
KolayAlt sınıfların, yapıcıları (constructors) düzgün bir şekilde zincirlemek ve devralınan metotlar üzerine inşa etmek için parent:: anahtar kelimesini kullanarak üst sınıf işlevselliğini nasıl genişletebileceğini gösteren bir ürün kataloğu sistemi oluşturalım.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
Product.php— Tüm ürünler için temel teşkil eden birProductsınıfı tanımlayın.$nameve$priceadında genel (public) özelliklere sahip olmalıdır. Yapıcı (constructor), bir isim ve fiyat kabul ederek her iki özelliği de ayarlamalıdır."[name]: $[price]"döndüren birgetDetails()metodu ekleyin.ElectronicProduct.php—Productsınıfını genişleten birElectronicProductsınıfı tanımlayın. Üst kısma Product dosyasını dahil edin. Bu sınıf bir$warrantyözelliği (ay cinsinden) ekler. Yapıcı; isim, fiyat ve garanti süresini kabul etmelidir — isim ve fiyatı üst sınıf aracılığıyla başlatmak içinparent::__construct()kullanın, ardından garanti süresini kendiniz ayarlayın. Üst sınıfın uygulamasının üzerine inşa edilen birgetDetails()metodu oluşturun:parent::getDetails()metodunu çağırın ve sonuna" (Warranty: [warranty] months)"ekleyin.main.php— ElectronicProduct dosyasını dahil edin. Üç girdi alacaksınız: ürün adı, fiyat (float'a dönüştürülecek bir dize olarak) ve garanti süresi (tam sayıya dönüştürülecek bir dize olarak). Bu değerlerle birElectronicProductoluşturun vegetDetails()çağrısının sonucunu yazdırın.
Bu meydan okuma, parent:: anahtar kelimesinin gerçek gücünü gösterir — sadece yapıcı zincirleme için değil, aynı zamanda metot davranışını genişletmek için de. ElectronicProduct sınıfınız, üst sınıfın biçimlendirme mantığını yeniden kullanır ve üzerine kendi ayrıntılarını ekleyerek kod tekrarından kaçınırken daha zengin bir çıktı oluşturur.
Kopya kağıdı
parent:: anahtar kelimesi, bir alt sınıfın (child class) üst sınıfındaki (parent class) metotlara ve özelliklere erişmesine olanak tanır.
Üst sınıfın yapıcı metodunu (constructor) alt sınıftan çağırmak için parent::__construct() kullanın:
<?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;
}
}
Herhangi bir üst sınıf metodunu çağırmak ve davranışını genişletmek için de parent:: kullanabilirsiniz:
<?php
class Animal {
public function describe() {
return "This is an animal";
}
}
class Dog extends Animal {
public function describe() {
return parent::describe() . " and it's a dog";
}
}
Bu yaklaşım, alt sınıfların kodu çoğaltmak yerine üst sınıf mantığını yeniden kullanmasına olanak tanıyarak düzgün yapıcı zincirleme (constructor chaining) ve metot genişletme sağlar.
Kendin dene
<?php
require_once 'ElectronicProduct.php';
// Girdileri oku
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));
// YAPILACAK: Giriş değerleriyle bir ElectronicProduct oluşturun
// ve getDetails() çağırma sonucunu yazdırın
?>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 KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarı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ıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi