Daha önce private erişim belirleyicisi yazımda private olan metod yada özelliklere sınıf dışından erişilemediğini söylemiştik. Peki biz yine de bu değeri okumak yada değiştirmek istersek ne yapacağız? Bu yazımda bu sorunun cevabını vermeye çalışacağım.

private olan metoda yada özelliğe sınıf dışından erişim için yine aynı sınıf içindeki başka bir public metod kullanılır.

Mantığı şöyle düşünebilirsiniz; evin kapısı kilitli ve anahtar sadece ev sahibinde. Siz içeri giremiyorsunuz ama ev sahibine "şunu bana verir misin" diyebiliyorsunuz. İşte buradaki ev sahibi bizim public metodumuz oluyor.

class Kase{ // Kaşe sınıfı

private $isim = "Mustafa YILMAZ"; // Kase sınıfına ait $isim özelliği ( private görünürlüğüne sahip)

public function yaz(){

echo $this->isim ."<br>";

}

public function set( $param ){
$this->isim = $param;
}

}

$ornek = new Kase();

$ornek->yaz();

// $ornek->isim="Canan Can"; // bu satır hata verir. $ornek->isim private (gizli) özelliğine sahip

$ornek->set("Canan Can");

$ornek->yaz();

kodların açıklamasını yapacak olursak,

Kase sınıfı içinde private olan $isim özelliğimiz var. Bu özelliğe sınıf dışından $ornek->isim diyerek ulaşmaya çalışırsak php bize "Cannot access private property" şeklinde bir hata verir.

Bu yüzden sınıf içine iki tane public metod yazdık. yaz() metodu $isim özelliğinin değerini ekrana yazıyor, set() metodu ise kendisine gönderilen parametreyi $isim özelliğine atıyor.

Bu metodlar sınıfın içinde olduğu için private olan $isim özelliğine $this ile rahatlıkla erişebiliyorlar. Biz de dışarıdan bu public metodları çağırarak dolaylı yoldan private özelliğe ulaşmış oluyoruz.

// çıktısı
// Mustafa YILMAZ
// Canan Can

Peki bu kadar uğraşmaya ne gerek var, doğrudan public yapsak olmaz mı? diye sorabilirsiniz. Olur ama bu yöntemin bize sağladığı en büyük fayda kontrolün bizde olmasıdır. Mesela set() metodu içine bir kontrol ekleyerek boş isim girilmesini engelleyebiliriz.

public function set( $param ){
if ( $param == "" ) {
echo "isim boş olamaz..<br>";
return;
}
$this->isim = $param;
}

Bu şekilde değer atayan metodlara genelde set (setter), değer okuyan metodlara ise get (getter) metodları denir.

private metoda yada özelliğe sadece sınıf içinden erişilebilir.