Ana Sayfa » Ders Notları ve Örnekler » PHP » PHP Sınıf Tanımlama ve Nesneler

Uyarılar :
  • Bu sayfada yazılanlar yeniden yayınlanamaz.
  • Bu örnek ders sırasındaki anlatımlardan derlenmiştir. Özellikle bir makale şeklinde yazılmamıştır. Bilgilerde eksiklikler bulunabilir.
Sınıflar :
  • Bilgisayar programlamada sınıflar (class) vasıtasıyla program kendi görevlerini yerine getiren daha küçük parçalara bölünür. Bu program parçaları (sınıflar) bir işin nasıl yapılacağını tanımlarlar. Programın çalışması sırasında hafızada sınıfların canlı örnekleri (nesneler) oluşturularak çalıştırılır.
  • Sınıflar modül olarak da düşünülebilir. Yani bir sınıf tanımlaması başka programlara eklenerek de kullanılabilir. Böylelikle bir sınıf bir çok yazılımda işe yarar.
  • Sınıfları bir toplum içindeki kendi işinde uzmanlaşmış ve aynı zamanda sadece kendi işine odaklanmış kişilere de benzetebilirsiniz. Bu kişiler sayesinde yöneticiler daha genel işlere odaklanarak yeni projeler geliştirmeye zaman ve imkan bulabilir ve daha iyi işler yapabilir. Programcı da sınıflar sayesinde sınıfların yaptığı işlerle veya sınıfları yazmakla ayrıca uğraşmak zorunda kalmaz, bir kez yazdığı sınıfı veya başkalarının yazdığı sınıfları defalarca kullanabilir ve programın genel amaçlarına odaklanıp daha büyük işler başarmak için zaman ve imkan bulabilir.
  • Sınıfların bir avantajı da hata ayıklamayı kolaylaştırmasıdır. Sınıfların yaptığı işleri gerçekleştiren kodlarla programın diğer kodları veya diğer sınıfların kodları birbirine karışmadığından her sınıf veya programın kendisi ayrı ayrı ele alınarak daha küçük ve karmaşık olmayan kodlarla uğraşılmış olur, bu şekilde daha az hata içeren programlar yazılabilir veya varsa hatalar daha çabuk tespit edilebilir ve daha çabuk giderilebilir.
  • Bazı programcılar sadece sınıflar yazarak çok yetenekli ve gelişmiş sınflar oluştururlar. Bunları diğerlerinin kullanımına sunarlar. Böylelikle her programcı her şeyi bilmek zorunda kalmadan program yazabilir (Örneğin .NET Framework Sınıf Kütüphanesi (.NET Framework Class Library) bizlere, yazmak için bilgimizin ve / veya vaktimizin yetmeyeceği binlerce işe yarar sınıf sunar).
  • PHP, C# veya Java gibi tam olarak nesneye yönelik bir programlama dili olmasa da sınıf tanımlamak ve kullanmak için ihtiyacımız olan bir çok şeyi barındırır.

Örnek :

<html>
<head><title>Sınıflar</title></head>
<body>
<?php
// Bir sınıf tanımlanıyor..
class Baslik
{
  // Sınıfın özelliği olarak kullanılacak değişkenler tanımlanıyor ...
  // Bu değişkenlere dışarıdan erişilerek istenmeyen değerlerin
  // verilmesini engellemek için Private olarak tanımlıyoruz. Değişkenler
  // bu şekilde tanımlandığında bu değişkenlere sınıf tanımlamalarının
  // (bu kodların) dışından erişilemez. Ancak altta da görüleceği gibi
  // bu değişkenlerin (sınıfın özelliklerinin) değerlerini değiştirmek
  // için özel fonksiyonlar yazacağız.

  private $zeminRengi;
  private $yaziRengi;
  private $icerikHTML;

  // Yapılandırıcı tanımlanıyor : 

  // Yapılandırıcılar, sınıf örneklerini (nesneleri)
  // oluşturmak için çalıştırılan fonksiyonlardır (metodlar)
  // ve nesneyi ilk kullanıma hazırlamak için yapılması
  // gereken işlemler ve özelliklere verilmesi gereken
  // ilk değerler vb. işlemler varsa bunlar da yapılandırıcıların
  // içinde gerçekleştirilir. Örneğin altında göreceğiniz $baslik1, $baslik2
  // gibi değişkeler, bu sınıftan oluşturulmuş birer nesnedir ve bu sınıfın bütün
  // özellik ve yöntemlerine sahiptirler. Örneğimizde, zorunlu olmamakla beraber
  // nesnenin özelliklerinin, başlangıç değerlerini atamak için yapılandırıcıdan
  // yararlanılıyor. Yapılandırıcıların bu şekilde tanımlanması
  // birden fazla özellikleri bir seferde değiştirmeye imkan tanıdığından
  // oldukça kullanışlıdır.

  // $this ifadesi sınıfın kendi referansıdır (kendisini işaret eder, 
  // kendisine başvurmak için kulanılır).
  // $this->yaziRengi ifadesi ise bu sınıfın yaziRengi özelliği demektir.

  function __construct($iMetin, $yRenk = "white", $zRenk="red")
  {
   
   // Bir özelliğe değer atarken özellik adının yanına $ işareti
   // konulmadığına dikkat edin ($this->$yaziRengi değil $this->yaziRengi yazdık)

   $this->yaziRengi = $yRenk;
   $this->zeminRengi = $zRenk;
   $this->icerikHTML = $iMetin;

  }

  // Sınıfın özellikleri (örneğimizde yazı için yaziRengi ve zemin
  // rengi için zeminRengi gibi) yukarıda tanımlanıp açıklandığı gibi
  // Private (özel / bu kodlara özel / bu kodların dışından erişilemeyen)
  // olarak tanımlandıklarından 
  // bu kodların dışından erişilemez. Sınıfı kullanan kişinin  değiştirmek için bu fonksiyonları kullanmak zorunda
  // kalacak. Biz de fonksiyonların içinde değiştirilmek istenen değerin
  // uygun olup olmadığını denetleme veya değiştirmeden önce ya da sonra
  // sonra yapılacak işlemler varsa bunlar için fırsat bulacağız. Buna
  // nesneye yönelik programlamada sarmalama (Encapsulation) denir.


  function zeminRengiDegistir($renk){
	if ($this->yaziRengi != $renk) // Zemin rengi, yazı rengi ile aynı yapılmak isteniyorsa değiştirme. Yazılar görünmez...
		$this->zeminRengi = $renk;
  }
  
  function yaziRenginiDegistir($renk) {
	if ($this->zeminRengi != $renk) // Yazı rengi, zemin rengi ile aynı yapılmak isteniyorsa değiştirme. Yazılar görünmez...
		$this->yaziRengi = $renk;
  }
  
  function icerikHTMLniDegistir($metin) { $this->icerikHTML = $metin; }
  
  // Sınıfın bir metodu. Metodlar, sınıfın yapacağı işleri tanımlarlar.
  // Örneğimizdeki metod, sınıfın özelliklerini kullanarak HTML çıktısına
  // başlık olarak kullanılabilecek bir DIV etiketi yazdırıyor...

  function goster()
  {
    
	// Sınıfın özelliklerini DIV etiketinin STYLE özelliğine ve 
	// içeriğine ekle. Bu şekilde bir etiket oluştur ve etiketi
	// HTML çıktısına yaz...

    echo "<div style=\"padding:10px;margin:5px;color:" .
		 $this->yaziRengi .
		 ";background-color:" . 
		 $this->zeminRengi .
		 "\">" .
		 $this->icerikHTML .
		 "</div>";	
  }
} // Sınıf tanımlamalarının sonu...

// Sınıfın örneğini tutacak bir değişken tanımlanarak (bu değişkenlere nesne
// denir) new SınıfAdı (Örneğimizde new Baslik) yazarak örnek oluşturuyoruz.
// Oluşturduğumuz örneği değişkene atıyoruz.

$baslik1 = new Baslik;
$baslik2 = new Baslik;

// Nesnenin özelliklerini değiştiriyoruz...
$baslik1->zeminRengiDegistir("red");
$baslik1->yaziRenginiDegistir("white");
$baslik1->icerikHTMLniDegistir("Nesne olarak tanımlanan etikete yazılan.");

// 2. nesnenin özelliklerini değiştiriyoruz...
$baslik2->zeminRengiDegistir("red");
$baslik2->yaziRenginiDegistir("white");
$baslik2->icerikHTMLniDegistir("Nesne olarak tanımlanan 2. etikete yazılan.");

// Nesnenin bir metodunu çağırıyoruz (metod nesneyi belirlenen özelliklere göre
// HTML çıktısına yazdırıyor.
$baslik1->goster();

// 2. nesnenin goster() metodu çağırılıyor...
$baslik2->goster();

// Başka bir örnek oluştur...
$baslik3 = new Baslik;

// Nesnenin yapılandırıcısını kullanarak tüm özelliklerini değiştir...
$baslik3->construct("white","blue","Başka bir başlık...");

// Nesnenin goster() metodunu çağır...
$baslik3->goster();
?>

</body>
</html>
İletişim : hazirsite@gmail.com