PHP private Anahtar Kelimesi
Nesne yönelimli programlamanın (Object-Oriented Programming) temel prensiplerinden biri kapsülleme (Encapsulation) kavramıdır. Bu prensibin en önemli araçlarından biri ise private erişim belirleyicisidir.
private olarak tanımlanan değişken ve metotlara yalnızca tanımlandıkları sınıfın içerisinden erişilebilir. Sınıf dışından veya başka bir sınıftan bu üyelere doğrudan erişmek mümkün değildir.
Bu sayede sınıfın iç yapısı korunur ve dış dünyaya yalnızca kullanılmasını istediğimiz metotlar açılmış olur.
Basit Bir Örnek
Aşağıdaki örnekte hem private değişken hem de private metot kullanılmaktadır.
<?php
class Person
{
private $name;
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name . " (" . self::getLength() . ")";
}
private function getLength()
{
return strlen($this->name);
}
}
$person = new Person();
$person->setName("Gokalp");
echo $person->getName();
?>
Çıktı:
Gokalp (6)
Kodun İncelenmesi
Sınıfımız içerisinde;
- Bir adet
privatedeğişken ($name) - Bir adet
privatemetot (getLength()) - İki adet
publicmetot (setName()vegetName())
bulunmaktadır.
İlk olarak setName() metodu ile private değişkene değer atıyoruz.
$person->setName("Gokalp");
Daha sonra getName() metodunu çağırıyoruz.
echo $person->getName();
Bu metot çalışırken içeriden private olan getLength() metodunu çağırıyor.
return $this->name . " (" . self::getLength() . ")";
Sonuç olarak hem isim hem de karakter uzunluğu birlikte ekrana yazdırılıyor.
Burada dikkat edilmesi gereken nokta şudur:
getLength() metodu dışarıdan çağrılamaz, ancak aynı sınıf içerisinden rahatlıkla kullanılabilir.
Private Metoda Dışarıdan Erişmeye Çalışmak
Aşağıdaki kullanım geçersizdir.
<?php
echo $person->getLength();
?>
Çalıştırıldığında aşağıdakine benzer bir hata oluşacaktır.
Fatal error:
Call to private method Person::getLength()
Çünkü private olarak tanımlanan metotlar yalnızca kendi sınıfı içerisinde kullanılabilir.
Aynı durum private değişkenler için de geçerlidir.
<?php
echo $person->name;
?>
Bu kullanım da hata ile sonuçlanacaktır.
self Anahtar Kelimesi
Sınıf içerisindeki başka bir metoda erişmek için self anahtar kelimesi kullanılabilir.
self::getLength();
Bu ifade, aynı sınıf içerisinde bulunan getLength() metodunu çağırmaktadır.
self ve parent Arasındaki Fark
PHP 5 ile birlikte gelen iki önemli anahtar kelime şunlardır.
self
Bulunduğumuz sınıf içerisindeki metotlara erişmek için kullanılır.
self::getLength();
parent
Kalıtım (inheritance) alınan üst sınıfın metotlarını çağırmak için kullanılır.
parent::getName();
Bu iki anahtar kelime özellikle kalıtım kullanılan projelerde oldukça sık karşımıza çıkar.
Sonuç
private, sınıfın iç detaylarını dış dünyadan gizlemek için kullanılan en önemli erişim belirleyicilerinden biridir.
Gerçek projelerde sınıf değişkenlerinin büyük çoğunluğu private olarak tanımlanır ve bu değişkenlere yalnızca public metotlar aracılığıyla erişilir. Böylece sınıfın iç yapısı korunur, kontrolsüz erişim engellenir ve daha güvenli, daha sürdürülebilir bir yazılım mimarisi oluşturulmuş olur.
📝 Arşiv Notu
Bu yazı ilk olarak 2011 yılında hazırlanmıştır ve örnekler PHP 5 sürümüne göre hazırlanmıştır.
private,public,protected,selfveparentanahtar kelimelerinin temel çalışma mantığı günümüzde de aynıdır. Modern PHP uygulamalarında kapsülleme (Encapsulation) prensibi doğrultusunda sınıf değişkenlerinin mümkün olduğuncaprivateolarak tanımlanması önerilmektedir.
self deyimini biraz açıklarmısın
http://tr.php.net/search.php >> self deyimi için
artı bir açıklama yazıda, tips-3 şeklinde bahseldilmiştir kolay gelsin