CodeBlanks Logo Icon CodeBlanks

Constructor ve abstract

PHP kursu · Orta seviye · Ders 57/115

Abstract sınıfta yapıcı tanımlayıp alt sınıfta parent:: ile çağırmayı öğrenirsin.

Abstract sınıfta yapıcı

Soyut bir sınıfın içinde __construct tanımlayabilirsin. Bu yapıcı, new ile doğrudan çağrılamaz (çünkü sınıf soyuttur); ama alt sınıf new ile örneklendiğinde çalışır. Yani yapıcı, alt sınıflar için ortak başlangıç (shared init) sağlar.

Örneğin Vehicle soyut sınıfı $name property'sini yapıcıda atar. Tüm alt sınıflar bu mantığı tekrar yazmaz; ebeveynden miras alır.

Alt sınıfın kendi yapıcısını tanımlamadığı durumlarda ebeveynin yapıcısı otomatik kullanılır. Ancak alt sınıf kendi yapıcısını yazarsa parent::__construct() ile açıkça çağırmalıdır.

parent::__construct ile ebeveyni çağır

Alt sınıf kendi yapıcısını tanımlarsa, ebeveynin yapıcısı otomatik çağrılmaz. Bunu açıkça parent::__construct() ile çağırman gerekir. Aksi halde ebeveynin başlangıç mantığı atlanır.

Tipik desen şudur: alt sınıfın yapıcısı ek parametreler alır, önce parent::__construct() ile ebeveynin yapıcısını çağırır, sonra kendi ek property'lerini yazar.

class Car extends Vehicle {
    public int $wheels;
    public function __construct(string $name, int $wheels) {
        parent::__construct($name);
        $this->wheels = $wheels;
    }
}

Bu desen, ortak başlangıcı korurken alt sınıfa özgü alanları da ekler.

Uygulama Abstract yapıcı + parent çağrısı

Bir Vehicle soyut sınıfı tanımla. public string $name property'si olsun. Yapıcı metodu public function __construct(string $name) olsun ve $this->name = $name atasın. Sonra Car sınıfını Vehicle'dan türet. Car'da önce public int $wheels property tanımla. Car'ın yapıcısı public function __construct(string $name, int $wheels) olsun; önce parent::__construct($name) çağırsın, sonra $this->wheels = $wheels atasın. Son olarak describe() metodu return $this->name . " " . $this->wheels . " tekerlek"; döndürsün. $c = new Car("Toyota", 4) ve echo $c->describe() . "\n";

Örnek çözümü göster
:__construct($name) çağır, sonra $this->wheels = $wheels ata. describe() $this->name . " " . $this->wheels . " tekerlek" döndürsün.
Örnek çözüm:
<?php
// Vehicle soyut sınıfını tanımla
abstract class Vehicle {
    public string $name;

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

class Car extends Vehicle {
    public int $wheels;

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

    public function describe(): string {
        return $this->name . " " . $this->wheels . " tekerlek";
    }
}

$c = new Car("Toyota", 4);
echo $c->describe() . "\n";

Kendini test et

  1. Soyut sınıfta yapıcı tanımlarsan alt sınıf ne yapmalı?

    • Hiçbir şey; ebeveyn yapıcısı otomatik çağrılır
    • Açıkça parent::__construct() çağırmalı
    • Yapıcıyı yeniden tanımlayamaz
    • Alt sınıf yapıcı tanımlayamaz
    Cevabı göster

    Açıkça parent::__construct() çağırmalı — Doğru. Alt sınıf kendi yapıcısını tanımlarsa parent::__construct() ile ebeveyni açıkça çağırmalı.

  2. parent yapıcı çağrısı

        public function __construct(string $name, int $wheels) {
            ____
            $this->wheels = $wheels;
        }
    Cevabı göster
        public function __construct(string $name, int $wheels) {
            parent::__construct($name);
            $this->wheels = $wheels;
        }
  3. Constructor ve abstract kavramlarını eşleştir

    abstract yapıcı
    Soyut sınıfta tanımlanır
    parent::__construct
    Ebeveyn yapıcıyı çağırır
    shared init
    Ortak başlangıç adımı
    alt sınıf yapıcısı
    Ek parametre alabilir

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