Menu
Coddy logo textTech

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 Labrador

parent::__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.

challenge icon

Görev

Kolay

Alt 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 bir Product sınıfı tanımlayın. $name ve $price adı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 bir getDetails() metodu ekleyin.
  • ElectronicProduct.phpProduct sınıfını genişleten bir ElectronicProduct sı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çin parent::__construct() kullanın, ardından garanti süresini kendiniz ayarlayın. Üst sınıfın uygulamasının üzerine inşa edilen bir getDetails() 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 bir ElectronicProduct oluşturun ve getDetails() ç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.

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

?>
quiz iconKendini test et

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