php, postgresql, mysql, javascript

java, jsf, jpa, jasper reports, pardus, linux, freebsd, ubuntu, solaris, damn small server

PHP’de singleton class

1 yorum yapıldı

Java, c# ve diğer dillerin en büyük avantajı, o dillerin özelliklerini iyi kullanabilen geliştiricilere sahip olması. Ancak PHP'de, özellikle Türkiye'de geliştiriciler genellikle sonuç odaklı çalışıyorlar. Doğruluğu projeden projeye değişir ancak ben PHP'nin özelliklerinin tam olarak bilinmesinden yanayım.

Bu yazımda PHP OOP'yi iyi bilen arkadaşlara PHP'de singleton classların nasıl oluşturulabileceğini anlatacağım.

Bir class düşünün, ondan yeni bir kopya türettiğimizde, eğer daha önce türetilmemişse, türetilmesini, eğer daha önce türetilmişse, türetilmiş olanın  referansını döndürsün. Yani uygulama boyunca class'tan sadece bir kopya üretilsin.

 
class MyClass {
 
   private function MyClass(){
 
      /*Dikkat ettiyseniz classın üretici methodu private, bu class'ı kullanmak isteyenler
 
      new MyClass() yazamasın, MyClass::getMyClass() yazmaya mecbur olsunlar.*/
 
   }
 
   public static function getMyClass(){
 
      static $myClass; // static değişkende tutuyoruz, çünkü bir dahaki sefere bu fonksiyonu çalıştırdığımızda değişken yerinde dursun
 
      if (!(bool)$myClass) $myClass = new MyClass();
 
      /* üretici method private olduğu için sadece class içerisindeki başka bir method tarafından çağırılaniliyor*/
 
      return $myClass;
 
   }
 
}
 
$myClass = MyClass::getMyClass();
 

Peki bu nerede işimize yarayacak ?

Örneğin bir veritabanı bağlantı classı yazıyoruz. Ve her ürettiğimizde veritabanına yeniden bağlantı kurmasın istiyoruz.

Yada classı tekrar ürettiğimizde, içerisindeki değerlerin aynen korunmuş olmasını istiyoruz. Yada sizin hayal gücünüze kalmış. :)

Yazan: Çağatay

Mart 18th, 2009 at 4:40 am

Facebook'ta Paylaş



1 yorum yapıldı to 'PHP’de singleton class'

Yorumlar: RSS Geri İzleme to 'PHP’de singleton class'.

  1. Yararlı bir örnek, JSP’de benzer uygulama yapmam için ilham kaynağı oldu :)

    Ramin Hasanoğlu

    22 Mar 09 at 12:29 am

Yorum Yapın