CodeBlanks Logo Icon CodeBlanks

private erişim

PHP kursu · Orta seviye · Ders 26/115

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

  1. private property tanımla

    class Counter {
        ____
    }
    Cevabı göster
    class Counter {
        private $count;
    }
  2. 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.

  3. 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

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