CodeBlanks Logo Icon CodeBlanks

protected erişim

PHP kursu · Orta seviye · Ders 25/115

protected erişimin yalnızca sınıf ve alt sınıflarla sınırlı olduğunu öğrenirsin.

protected erişim, görünürlük bağlamında

protected niteleyicisini miras alma dersinde kısaca görmüştün. Şimdi görünürlük bağlamında daha yakından bakalım.

Bir property veya method protected ise, yalnızca şu yerlerden erişilebilir:

  • tanımlandığı sınıfın içinden
  • bu sınıfı extends eden alt sınıfların içinden
  • aynı hiyerarşideki ebeveyn sınıflardan

Sınıf dışından doğrudan erişim mümkün değildir: $obj->protectedProp yazarsan PHP fatal error fırlatır. Bu yüzden protected, dış dünyaya kapatıp alt sınıflara açmak istediğin veriler için idealdir.

protected'a dışarıdan erişilemez

Şu örneği düşün: class Animal { protected string $name; }. Burada $name protected'dır. Sınıf dışından $cat->name yazarsan PHP fatal error fırlatır: Cannot access protected property.

Buna karşın Dog extends Animal yazıp Dog içinde $this->name dersen erişim başarılı olur. Çünkü Dog, Animal'ın alt sınıfıdır ve protected üyelere erişebilir.

Yani protected, dış dünyaya kapalıdır ama miras yoluyla gelen alt sınıflara açıktır. Bu özellik, alt sınıfların ebeveynin iç durumunu kullanmasını sağlar.

Uygulama protected property ile alt sınıf

Bir Animal sınıfı tanımla. protected string $name property'si ve __construct(string $name) yapıcı metodu olsun; yapıcı $this->name = $name atasın. Sonra Dog extends Animal ile bir alt sınıf tanımla ve içine public function getName(): string metodu ekle; bu metod return $this->name döndürsün. Son olarak $dog = new Dog("Karabaş") ile örnek oluştur ve echo $dog->getName() . "\n" yazdır.

Örnek çözümü göster
Animal'da protected $name tanımla, Dog extends Animal yap, getName return $this->name döndürsün.
Örnek çözüm:
<?php
// Animal ve Dog sınıflarını tanımla
class Animal {
    protected string $name;
    public function __construct(string $name) {
        $this->name = $name;
    }
}
class Dog extends Animal {
    public function getName(): string {
        return $this->name;
    }
}
$dog = new Dog("Karabaş");
echo $dog->getName() . "\n";

Kendini test et

  1. protected property'ye hangi yerden erişilebilir?

    • Tanımlandığı sınıfın içinden ve alt sınıfların içinden
    • Yalnızca tanımlandığı sınıfın içinden
    • Sınıf dışından her yerden
    • Yalnızca dosya düzeyinde, sınıf dışından
    Cevabı göster

    Tanımlandığı sınıfın içinden ve alt sınıfların içinden — Doğru. protected üyelere sınıf içi ve alt sınıflar içinden erişilir.

  2. protected property tanımla

    class Animal {
        ____
    }
    Cevabı göster
    class Animal {
        protected $name;
    }
  3. protected ile ilgili ifadeleri eşleştir

    protected property
    Sınıf ve alt sınıflar
    Sınıf dışından erişim
    Fatal error verir
    extends ile miras
    protected'a erişim sağlar
    Ebeveyn içinde $this->name
    Sınıf içi erişim

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