Belki OOP için biraz fazla ileri bir konu ama, Singleton design pattern’i oldukça gerekli olabiliyor. Pek çok arkadaşımız aslında tek instance’i olması gereken classlarını singleton yapmıyor, biryerlerde aynı object’in tek bir instance’i gerekse bile boyuna çağırıyor. Dolayısıyla PHP boşu boşuna performans kaybediyor, boşu boşuna onca sistem kaynağı gidiyor. Yazık değil mi? Ağlar o memmory blocklar sonra arkanızdan.

Konumuza dönersek, singleton class’ın özelliği kendisinden sadece bir tane çağırılabilmesidir, tıpkı class içine alınmamış geleneksel fonksiyonlar gibi.

<?php

if (!interface_exists('Singleton_Interface')) {
    /**
     * singleton interface - phpclasses.org'dan alinmistir, standart interface
     * @author Matthieu MARY <matthieu@phplibrairies.com>
     * @license http://opensource.org/licenses/gpl-license.php GNU Public License
     */

    interface Singleton_Interface
    {
        /**
         * singleton standardı getInstance ile alınır, öylesi hoş..
         * @access public
         * @static
         */

        public static function getInstance();
        /**
         * __clone overload methodunun üstesinden gelinmeli
         * exception throw edelim
         */

        public function __clone();
    }
}


    /*
     * A true singleton in PHP - phpclasses.org'dan alinmistir biraz da gelistirilmistir.
     * @author Sourav Ray - GY
     * @version 1.0.0
     * @name singletone.class
     */

class sTonClass implements Singleton_Interface  {
    static $TheInstance; //singeTon'u sağlayacak degisken
    public $deneme; //denemesi..
    // class'ın constructor'i private, sinifin disarisindan kendisi cagirilamayacak { }   
    private function sTonClass() {
    }
    public static function getInstance() //Class'ın örneğini yaratan ayni zamanda donduren fonksyon.
{
        if (sTonClass::$TheInstance == NULL) //Eger daha once bir ornegi mevcut degilse class'i yaratip dondurur.
            sTonClass::$TheInstance = new sTonClass ( );
       
        $instanceReferance = & sTonClass::$TheInstance; // Eger ornegi mevcutsa, eski ornegi dondurur
        return $instanceReferance; // Eski ornegin referansi.
    }
    public function __clone() { throw new Exception('Bu sınıf singleton'); } //bu sınıfın clone'u olmaz.
} // bitis

//kullanim
$x = sTonClass::getInstance ();
$x->deneme = "hede";
$y = sTonClass::getInstance();
echo $y->deneme;
?>

Singleton’un ne olduğu ve kullanımı ile ilgili daha detaylı bilgi için tıklayın.

Eğer beğendiysen, belki GWG'nin RSS beslemesine kayıt olmak istersin. Ziyaretin için teşekkürler!