php, postgresql, mysql, javascript

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

PHP’de Object Pool

Yorum yapılmadı

Uğraştığım işlerden birinde, bir web sitesinin birden fazla veritabanından bağlantı çekebilmesi ihtiyacı doğmuştu.
Varsayalım ki, kullanıcı bilgilerini MySQL veritabanından, istatistik bilgilerini PostgreSQL veritabanından çekmemiz gerekiyor.
Bu durumda birden fazla bağlantı kurmamız gerekecek ve singleton patterni işimizi görmeyecek.

Bunun için object pool patternini kullanıyoruz. Aynı singletonda yaptığımız gibi, static create fonksiyonun içine static bir değişken atıyoruz. Ancak bu sefer değişken bir diziyi tutuyor.
Dizinin indexine bağlantının ismini yazarak birden fazla elemana işaretini kolaylaştırıyoruz.
Örneğin;

 
$connection1 = Connection::create("mysql1");
$connection2 = Connection::create("pgsql1");
 

Bu kod bize birden fazla bağlantıyı aynı anda aynı class üzerinde tutabilme yeteneği verecek.
Kodun başka bir yerinde "pgsql1" bağlantısını almak istediğimizde daha önce oluşturulan classı alabiliyor olacağız.

 
<?
class Connection{
	private function __construct($connName_){
	}
	private function __clone(){
 
	}
	public static function create($connName_){
		static $instance=array();
		if (!isset($instance[$connName_]) || !$instance[$connName_] instanceof Connection){
			$instance[$connName_] = new Connection($connName_);
		}
		return $instance[$connName_];
	}
}
?>
 


Yorum Yapın