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.

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

?>
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