PHP Nesneye Dayalı Programlama public Deyimi
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
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ı:
Gokalp Kuscu
Yukarıdaki örnekte üç adet public üye bulunmaktadır.
$nameisimli değişkensetName()metodugetName()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
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.
public function setName($name)
{
$this->name = $name;
}
getName() ise o anda değişkende bulunan değeri geriye döndürmektedir.
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
$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;
$person->setName("Gokalp Kuscu");
ile değişkene değer atayabilir,
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.
$person->name = "Ahmet Yılmaz";
echo $person->getName();
Çıktı:
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,privateveprotectederişim belirleyicileri aynı mantıkla kullanılmaktadır. Ancak modern PHP uygulamalarında sınıf değişkenlerinin doğrudanpublicolarak tanımlanması yerine, mümkün olduğuncaprivateveyaprotectedkullanılması ve kontrollü erişim için metotların tercih edilmesi önerilmektedir.
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.
off tekrar edip etüt etmem gereken bir konu daha çıkardan başıma Gökalp. yazma yahu makale falan 🙂
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.
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 🙂