Singleton Pattern
Programcıların benzer problemlere aynı çözümleri üretmeleriyle beraber bazı kalıplar ortaya çıkmıştır. Singleton yani tekilleştirme tasarımı da en çok duyulan tasarımdır çünkü sınıf kullanan herkesin ihtiyacı vardır.
Ben zaten yaparım, pattern falan da bilmem diyenler olabilir ki haklılar da. Herkesin kendine göre yöntemleri olabilir bu singleton işlemleri için. Ben en çok şöyle kullanırım
$cnylmz= new cnylmz;
sağlıklı bi kod mu peki derseniz, tabi ki değil ama en azından hangi değişkenleri kullandığımı bildiğim için böyle bi çözüm üretebiliyorum. Bunu şöyle bir kod dizesiyle de yapmanız mümkündür.
function sinif($sinifAdi) { global $siniflar; require_once('ek/class-'.$sinifAdi.'.php'); $siniflar[$sinifAdi]=new $sinifAdi; } return $siniflar[$sinifAdi]; } }
Tüm sınıfarı bu şekil çağırıyorsanız problem yok çünkü aynı isimde farklı dosyalar olamayacağından, aynı isimde farklı sınıflarda olamaz. Artık sınıflarımızı $sinif=sinif('cnylmz'); şeklinde çağırabiliriz. Böyle bir fonksiyon da yeterlidir ama problem riski bırakmamak adına array_key_existsle yetinmeyip bir de instanceof ile çağırdığımız sınıf, daha önce var olan sınıfmıymış diye kontrol edelim. (instanceof tam olarak sınıfların eşitliğini tespit etmez, sınıfınızın implements veya extends ile baz aldığı sınıfları da karşılaştırdığınızda true değerini alırsınız)
function sinif($sinifAdi) { global $siniflar; require_once('ek/class-'.$sinifAdi.'.php'); $siniflar[$sinifAdi]=new $sinifAdi; elseif(($siniflar[$sinifAdi] intanceof $sinif)===false) $siniflar[$sinifAdi]=new $sinifAdi; return $siniflar[$sinifAdi]; } }
İşte bu kodlar artık bizim tekilleştirme amacımızı güden kodlardır. mademki sınıflarla uğraşıyoruz, bunu neden böyle bırakalım deyip, bunu da düzgün bir sınıf haline getirip örneğimizi bitirelim
class yeni{ private static $siniflar; require_once('ek/class-'.$sinifAdi.'.php'); self::$siniflar[$sinifAdi]=new $sinifAdi; elseif((self::$siniflar[$sinifAdi] intanceof $sinif)===false) self::$siniflar[$sinifAdi]=new $sinifAdi; return self::$siniflar[$sinifAdi]; } }
sınıfın include edilip edilmeyeceğine, edilecekse yolunun ne olacağına ister fonksiyon paramtereleri ile oynarayak, ister kod içerisinde değişiklik yaparak çözümler üretebilirsiniz. Şu anki halinde
ek/class-cnylmz.php dosyasında bulunan bir sınıfı çağırıp çalıştırmak için
<?php // Burada singleton veya varsa gerekli dosyalarımız onları çağırdık $cnylmz=yeni::sinif('cnylmz'); $cnylmz->yazdir('Merhaba Dünya :)'); ?>
kodlarını yazmamız gerekir.
Elimden geldiğince sade şekilde anlatmaya çalıştım, umarım açıklayıcı olabilmişimdir