人気記事

広告

記事検索

MOVION.netについて

WEB技術に関することや、気になるWEBサイトなどについて個人的なメモを残すためのブログです。

その他運営サイト

かかわっているサイト

PHP5でデザインパターン・Singleton(シングルトン)編

結構よく使うSingleton。インスタンスが1個であることを保証出来る。
php4で、Singleton中途半端に実装して、newもgetInstanceも誤って使うと訳がわからなくなります。

以下ソースコード。

  1. < ?php
  2. class Singleton {
  3.     private static $singleton;
  4.     private $_name;
  5.     private function __construct() {
  6.         print "create instance<br />";
  7.     }
  8.     public static function getInstance() {
  9.         if (!is_object(Singleton::$singleton)) {
  10.             Singleton::$singleton = new Singleton();
  11.         }
  12.         return Singleton::$singleton;
  13.     }
  14.     public function setName($name) {
  15.         $this->_name = $name;
  16.     }
  17.     public function getName() {
  18.         return $this->_name;
  19.     }
  20. }
  21.  
  22. print ‘Singleton.php test start.<br />’;
  23.  
  24. $object1 = Singleton::getInstance();
  25. $object2 = Singleton::getInstance();
  26.  
  27. $object1->setName(‘akira’);
  28. print $object1->getName() . ‘<br />’;
  29. print $object2->getName() . ‘<br />’;
  30. $object2->setName(‘yoshiko’);
  31. print $object1->getName() . ‘<br />’;
  32. print $object2->getName() . ‘<br />’;
  33.  
  34. $object3 = new Singleton();
  35. print $object3->getName() . ‘<br />’;
  36.  
  37. echo ‘Singleton.php test end.<br />’;
  38. ?>

これで、$objcet1も$object2も同じインスタンスです。
$object3は生成出来ません。

で、以下結果。
———–
Singleton.php test start
create instance
akira
akira
yoshiko
yoshiko

Fatal error: Call to private Singleton::__construct() from context ” in /var/www/public_html/exsample/Singleton.php on line 34
———–

34行目でprivateになってるコンストラクタを呼び出そうとしているので、エラー(Fatal error)が発生しています。
そのため、「Singleton.php test end.」までは進みません。

今さらなネタですが、とりあえず。

add to hatena hatena.comment add to del.icio.us add to livedoor.clip add to Yahoo!Bookmark

この記事にはまだコメントがついていません。

Comment Feed Comment feed for this entry

Trackback URI :

コメントをどうぞ

段落や改行は自動挿入です。メールアドレスはサイト上では非表示です。