İçeriğe geç
← Blog

PHP private Anahtar Kelimesi

28 Nisan 2010, 14:19 PHP 3 dk 5.7k 3

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
<?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ı:

PHP
Gokalp (6)

Kodun İncelenmesi

Sınıfımız içerisinde;

  • Bir adet private değişken ($name)
  • Bir adet private metot (getLength())
  • İki adet public metot (setName() ve getName())

bulunmaktadır.

İlk olarak setName() metodu ile private değişkene değer atıyoruz.

PHP
$person->setName("Gokalp");

Daha sonra getName() metodunu çağırıyoruz.

PHP
echo $person->getName();

Bu metot çalışırken içeriden private olan getLength() metodunu çağırıyor.

PHP
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
<?php

echo $person->getLength();

?>

Çalıştırıldığında aşağıdakine benzer bir hata oluşacaktır.

PHP
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
<?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.

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

PHP
self::getLength();

parent

Kalıtım (inheritance) alınan üst sınıfın metotlarını çağırmak için kullanılır.

PHP
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, self ve parent anahtar 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ğunca private olarak tanımlanması önerilmektedir.

3 yorum