CodeBlanks Logo Icon CodeBlanks

parent:: ile ebeveyne erişim

PHP kursu · Orta seviye · Ders 14/115

parent:: ile ebeveyn sınıfın method ve yapıcısına erişmeyi öğrenirsin.

parent:: ile ebeveyne erişim

Bazen çocuk sınıf, ebeveyn sınıfın bir metodunu (özellikle __construct) çağırmak ister. PHP'de bunun için parent:: operatörü kullanılır.

parent:: aslında ebeveyn sınıfın adını yazmanın kısayoludur. parent::method() yazmak, ebeveynin method()'unu çağırır. Bu, özellikle çocuk sınıf kendi yapıcısını tanımladığında kritiktir: ebeveynin yapıcısı otomatik çağrılmaz, açıkça parent::__construct(...) yazman gerekir.

İki nokta üst üste (::) operatörüne scope resolution (kapsam çözümleme) operatörü denir.

parent::__construct örneği

Car sınıfı hem brand hem de doors (kapı sayısı) bilgilerini tutsun. Vehicle ebeveynin yapıcısı yalnızca brand bekler.

Çocuk sınıfın yapıcısı iki parametre alır: $brand ve $doors. parent::__construct($brand) ile ebeveynin yapıcısını çağırıp $brand'ı aktarır, sonra $this->doors = $doors ile kendi property'sini başlatır.

Bu desen, ebeveynin başlatma mantığını çoğaltmadan onu yeniden kullanmanın standart yolu.

Uygulama Car yapıcısı parent::__construct çağırsın

Bu derste Vehicle sınıfı yalnızca brand alıyor. Sen, Car sınıfını Vehicle'dan türet ve kendi yapıcısında iki parametre ($brand ve $doors) al. Yapıcının içinde parent::__construct($brand) ile ebeveynin yapıcısını çağır, sonra $this->doors = $doors ile doors property'sini başlat. info() metodu brand ve doors'u birleştirsin. Volvo marka 4 kapılı bir Car örneği yapıp info() çıktısını yazdır.

Örnek çözümü göster
:__construct($brand) ile ebeveyne paslar, sonra $this->doors'u atar.
Örnek çözüm:
<?php

class Vehicle {
    public string $brand;

    public function __construct(string $brand) {
        $this->brand = $brand;
    }
}

class Car extends Vehicle {
    public int $doors;

    public function __construct(string $brand, int $doors) {
        parent::__construct($brand);
        $this->doors = $doors;
    }

    public function info(): string {
        return $this->brand . " - " . $this->doors . " kapı";
    }
}

$car = new Car("Volvo", 4);
echo $car->info();

Kendini test et

  1. Çocuk sınıf kendi yapıcısını tanımladığında ne olur?

    • Ebeveynin __construct'ı otomatik çağrılır
    • Ebeveynin __construct'ı hiç çağrılmaz, parent::__construct() gerekir
    • Sınıf örneği oluşturulamaz
    • Ebeveyn sınıf silinir
    Cevabı göster

    Ebeveynin __construct'ı hiç çağrılmaz, parent::__construct() gerekir — Doğru; çocuk __construct tanımlarsa ebeveynin yapıcısı otomatik çağrılmaz, parent::__construct() yazmalısın.

  2. parent::__construct çağrısını tamamla

        public function __construct(string $brand, int $doors) {
            ____::__construct($brand);
            $this->doors = $doors;
        }
    Cevabı göster
        public function __construct(string $brand, int $doors) {
            parent::__construct($brand);
            $this->doors = $doors;
        }
  3. parent:: ile ilgili kavramları eşleştir

    parent::
    Ebeveyne erişim operatörü
    ::
    Kapsam çözümleme operatörü
    parent::__construct()
    Ebeveyn yapıcısını çağırır
    Kendi __construct
    Ebeveyn yapıcısı otomatik çağrılmaz

Orta seviye bölümündeki tüm dersler