似非Singltonな関数でデータベースのコネクションを1つだけにする
オブジェクトじゃないんのでSingltonでも無いんだろうけども。。。
PHPで何度も同じDBをオープンしないようにするコツみたいなものでしょうか。
本当のSingltonは↓みたいな方法で実現できます。
PDOでSingletonを実現しよう - @blog.justoneplanet.info
DBのコネクション取得を関数にした状態。
<?php function getDB(){ return new PDO('sqlite:test.sqlite', "", ""); } $a = getDB(); $b = getDB(); var_dump($a);//object(PDO)#1 (0) {}→コネクション番号が#1 var_dump($b);//object(PDO)#2 (0) {}→コネクション番号が#2(新たなコネクションになっている)
コネクション番号は*1
DBのコネクション取得の関数を似非Singlton化
<?php function getDB(){ if(!isset($GLOBALS["getDB"])){ $GLOBALS["getDB"]=new PDO('sqlite:test.sqlite', "", ""); } return $GLOBALS["getDB"]; } $a = getDB(); $b = getDB(); var_dump($a);//object(PDO)#1 (0) {}→コネクション番号が#1 var_dump($b);//object(PDO)#1 (0) {}→コネクション番号が#1(コネクションが1つだけしか無い)
デメリットは$GLOBALS["getDB"]をどこからでも書き換えてしまえる事でしょうか。
本当のSingltonならばクラスのprivateな領域に隠してあるので外から書き換えることができません。
*1:勝手に名前をつけました。