PHP
protected erişim
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
-
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.
-
protected property tanımla
class Animal {
____
}
Cevabı göster
class Animal {
protected $name;
}
-
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
Sıradaki ders: private erişim