ちょっと変わったphpのシングルトン化について

phpのインスタンスでsingletonなモデルで運用したい場面がでてきた。

でもちょっと条件があって、同じオプション(コンストラクタに渡す変数)の時に同じインスタンスを利用してもらいたい。

というのもDBコネクションを抽象化するクラスを挟んでるんだけど、DSNに相当するものをコンストラクタに渡してるからそれごとに違うコネクションを張ってほしい。これをやってくれないとトランザクションの途中で割り込んだりしてくれてそれはもう大変なことになる。そのためのテスト。

シングルトン化するコードは参考にした。ありがとうございますた。

今日も適当ダイアリー PHPでシングルトンを利用

こんなかんじでテストコードを書いてみる。

<?php
main();
function main(){
 for($i=0; $i<3; $i++){
 $test[$i] = test::gi($i);
 }
 for($i=0; $i<3; $i++){
 $test[$i+3] = test::gi($i);
 }
 foreach($test as $value){
 var_dump($value->rand);
 }
}
class test{
 public $rand;
 private static $ins;
 private function __construct($num){
 $this->rand = rand()%30;
 print $this->rand. "\n";
 }
 public function gi($num){
 if(test::$ins[$num] == NULL){
 test::$ins[$num] = new test($num);
 }else{
 // the incetance is already exists
 }
 return test::$ins[$num];
 }

}

これを動かしてみる。

%php singletonTest.php
7
15
11
int(7)
int(15)
int(11)
int(7)
int(15)
int(11)

コメントを残す