İçeriğe geç
← Blog

PHP Nesneye Dayalı Programlama public Deyimi

6 Şubat 2010, 02:38 PHP 3 dk 5.4k 4

PHP 4 döneminde sınıf değişkenleri ve metotları varsayılan olarak var anahtar kelimesi ile tanımlanıyordu. Erişim belirleyicileri (visibility) henüz dilin bir parçası olmadığı için geliştiriciler, hangi değişkenin veya metodun nasıl kullanılacağını genellikle yorum satırları ile belirtirdi.

PHP 5 ile birlikte nesne yönelimli programlama (Object-Oriented Programming) konusunda önemli yenilikler geldi ve public, private ve protected erişim belirleyicileri dile eklendi.

Bu yazıda en temel erişim belirleyicisi olan public kavramını inceleyeceğiz.

Public Nedir?

public olarak tanımlanan bir değişken veya metoda, sınıfın hem içinden hem de dışından erişilebilir.

Yani sınıftan oluşturulan herhangi bir nesne üzerinden bu üyelere doğrudan ulaşabilir ve kullanabilirsiniz.

Bunu daha iyi anlamak için aşağıdaki örneği inceleyelim.

Örnek Sınıf

PHP
<?php

class Person
{
    public $name;

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

$person = new Person();

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

echo $person->getName();

?>

Çıktı:

PHP
Gokalp Kuscu

Yukarıdaki örnekte üç adet public üye bulunmaktadır.

  • $name isimli değişken
  • setName() metodu
  • getName() metodu

Bu üyelerin tamamına sınıf dışından erişilebilmektedir.


Public Değişkene Doğrudan Erişim

public olarak tanımlanan değişkenlere metod kullanmadan da doğrudan erişilebilir.

PHP
<?php

class Person
{
    public $name;
}

$person = new Person();

$person->name = "Gokalp Kuscu";

echo $person->name;

?>

Bu örnekte herhangi bir metoda ihtiyaç duymadan değişkenin değeri değiştirilmiş ve okunmuştur.


Metotlar Nasıl Çalışıyor?

setName() metodunun görevi dışarıdan aldığı değeri sınıf içerisindeki değişkene atamaktır.

PHP
public function setName($name)
{
    $this->name = $name;
}

getName() ise o anda değişkende bulunan değeri geriye döndürmektedir.

PHP
public function getName()
{
    return $this->name;
}

Nesne Üzerinden Erişim

Sınıf tek başına bir şablondur. Onu kullanabilmek için bir nesne (object) oluşturmamız gerekir.

PHP
<?php

$person = new Person();

?>

Artık oluşturduğumuz nesne sayesinde sınıf içerisindeki tüm public değişken ve metotlara erişebiliriz.

Örneğin;

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

ile değişkene değer atayabilir,

PHP
echo $person->getName();

ile bu değeri ekrana yazdırabiliriz.

Aynı şekilde değişken public olduğu için doğrudan erişim de mümkündür.

PHP
$person->name = "Ahmet Yılmaz";

echo $person->getName();

Çıktı:

PHP
Ahmet Yılmaz

Görüldüğü gibi metot ile atadığımız değer, daha sonra doğrudan değiştirilmiş ve getName() metodu son atanan değeri döndürmüştür.

Sonuç

public, PHP’deki en temel erişim belirleyicisidir. Bu anahtar kelime ile tanımlanan değişken ve metotlara uygulamanın her yerinden erişilebilir.

Nesne yönelimli programlamaya yeni başlayanlar için anlaşılması en kolay erişim belirleyicisi olsa da, gerçek projelerde sınıfın iç verilerini koruyabilmek adına çoğu zaman değişkenler private olarak tanımlanır ve dış dünyaya yalnızca gerekli metotlar açılır. Böylece kapsülleme (Encapsulation) prensibi korunmuş olur.


📝 Arşiv Notu

Bu yazı ilk olarak 2011 yılında hazırlanmıştır ve örnekler PHP 5 dönemine aittir. Günümüzde de public, private ve protected erişim belirleyicileri aynı mantıkla kullanılmaktadır. Ancak modern PHP uygulamalarında sınıf değişkenlerinin doğrudan public olarak tanımlanması yerine, mümkün olduğunca private veya protected kullanılması ve kontrollü erişim için metotların tercih edilmesi önerilmektedir.

4 yorum

  1. Burada bahsedilen yapılan yapılar aslında .net mimarisine yakın yapılardır. Hatta object oriented destekleyen mimarilerin çoğu böyledir. Bu yüzden mantık bakımından anlaşıldığında diğer programlama dillerini öğrenmek basitleşir, sadece syntax yapısı ve dili kullanma kabiliyeti kullanımı sıkıntı yaratmaktadır.

  2. hc0de, bunlar OO’nun olmazsa olmazlarıdır public private protected const abstract final gibi ozellikleri bilmezseniz OO yazdiğinizi zannedersiniz fakat yaptığınız sey sadece fonksiyon olusturmak olur.

  3. 0xyGen, yani? ne demek istedigini anlamadim k.bakma 🙂 sitem ettim gökalp’e uzun zamandır bilgisayarla ilişkim yoktu okudukça hatırlamam gereken şeyler olduğu için sen ne anladın anlamadim ben 🙂