private erişim
private erişimin yalnızca tanımlandığı sınıfla sınırlı olduğunu öğrenirsin.
private erişim niteleyicisi
private, en sıkı görünürlüktür. Bir property veya method private ise, yalnızca tanımlandığı sınıfın içinde erişilebilir. Alt sınıflar bile erişemez.
Örneğin class Counter { private int $count = 0; } tanımlarsan, $count'a yalnızca Counter sınıfının kendi metotlarından $this->count ile erişilir. Sınıf dışından veya bir alt sınıftan erişmek istersen PHP fatal error verir.
private, sınıfın iç uygulama detayını tamamen gizlemek istediğinde kullanılır. Bu, encapsulation'ın (sarmalama) temel taşıdır ve dışarıdaki kodun iç durumu bozmasını engeller.
private subclass'tan erişilemez
Şu örneğe bak: class Account { private float $balance = 0; } ile başlayalım. class Savings extends Account { public function peek() { return $this->balance; } } şeklinde bir alt sınıf tanımlarsan, Savings->peek() çağrıldığında PHP fatal error verir.
Çünkü $balance private ve Savings, Account'ın alt sınıfı olsa bile erişemez. Bu, protected ile private arasındaki temel farktır: protected alt sınıflara açıktır, private ise yalnızca tanımlandığı sınıfa.
Alt sınıfın bu veriyi kullanması gerekiyorsa, ebeveyn public veya protected bir metod açmalı ya da veriyi protected yapmalıdır.
Uygulama private property ile Counter sınıfı
Bir Counter sınıfı tanımla. private int $count = 0 property'si olsun. İçine public function increment(): void metodu ekle; bu metod $this->count++ yapsın. Ayrıca public function getCount(): int metodu return $this->count döndürsün. Sonra $counter = new Counter() oluştur, üç kez $counter->increment() çağır ve echo $counter->getCount() . "\n" yazdır.
Örnek çözümü göster
private $count tanımla, increment $this->count++ yapsın, getCount return $this->count döndürsün.
Örnek çözüm:
<?php
// Counter sınıfını private property ile tanımla
class Counter {
private int $count = 0;
public function increment(): void {
$this->count++;
}
public function getCount(): int {
return $this->count;
}
}
$counter = new Counter();
$counter->increment();
$counter->increment();
$counter->increment();
echo $counter->getCount() . "\n";
Kendini test et
-
private property tanımla
class Counter { ____ }Cevabı göster
class Counter { private $count; } -
private bir property'ye alt sınıftan erişmek istersen ne olur?
- Erişebilirsin, çünkü alt sınıf miras alır
- Sadece protected olarak işaretlenirse erişebilirsin
- Fatal error: Cannot access private property
- Uyarı verir ama yine de erişir
Cevabı göster
Fatal error: Cannot access private property — Doğru. private üyelere alt sınıflar bile erişemez; PHP fatal error verir.
-
Görünürlük modlarını eşleştir
- private $count
- Tanımlandığı sınıf
- public $count
- Her yerden erişilebilir
- protected $count
- Sınıf ve alt sınıflar
- var $count
- Eski kullanım, public