PHPのシングルトンパターン

class Singleton {
    var $num = 0;
    function Singleton($flg=null) {
        if (!$flg){
            die("ERR: use getInstance()\n");
        }
    }

    function &getInstance() {
        static $singleton;
        if ($singleton == null){
            $singleton = new Singleton(true);
        }
        return $singleton;
    }

    function add() {
        $this->num += 1;
    }
}
$s1 =& Singleton::getInstance();
$s2 =& Singleton::getInstance();
$s1->add();
print $s1->num."\n"; // => 1
print $s2->num."\n"; // => 1
$s2->add();
print $s1->num."\n"; // => 2
print $s2->num."\n"; // => 2
  • getInstance()はリファレンス返しする。function &getInstance()の&が必要ということ。
  • インスタンスもリファレンスとして受ける。$s1 =& xxx の&が必要ということ。
  • また、
  • new Singleton()は、リファレンス返しでなく、コピーで渡すこと。
  • すなわち、$singleton =& new Singleton(true); としてはダメ。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2006-05-12 (金) 15:44:27 (4424d)