TOP比較データ> PHP5版  Singletonパターン
PHP4とJavaのパフォーマンス比較
徹底比較!! PHP & Java

第5回:PHP5のオブジェクト指向

著者:ワイズノット  土橋 芳孝   2004/12/17
1   2  3  次のページ
PHP5版  Singletonパターン

   まずは本連載の第3回「PHP4とJavaのオブジェクト指向」で登場したSingletonパターンを検証してみます。
PHP5版  Singletonパターン
<?php
class Singleton {

// シングルトンオブジェクトを格納する変数
private static $singleton = null;

// メッセージを格納する変数
private $msg = null;

// コンストラクタ
private function __construct() {
echo "インスタンスを生成しました\n";
}

// インスタンスを生成する
public static function getInstance() {
if (Singleton::$singleton == null) {
Singleton::$singleton = new Singleton();
} else {
echo "インスタンスは既に存在します\n";
}
return Singleton::$singleton;
}

// メッセージを格納する
public function setMsg($str) {
$this->$msg = $str;
}

// メッセージを取得する
public function getMsg() {
return $this->$msg;
}
}

echo "処理を開始しました\n";

// getInstance()でインスタンスを生成する
$obj1 = Singleton::getInstance();
$obj1->setMsg('$obj1 = Singleton::getInstance()');
echo "obj1 : ".$obj1->getMsg()."\n";

// getInstance()でインスタンスを生成する
$obj2 = Singleton::getInstance();
$obj2->setMsg('$obj2 = Singleton::getInstance()');
echo "obj1 : ".$obj1->getMsg()."\n";
echo "obj2 : ".$obj2->getMsg()."\n";

// 直接インスタンスを生成する
$obj3 = new Singleton();
$obj3->setMsg('$obj3 = new Singleton()');
echo "obj1 : ".$obj1->getMsg()."\n";
echo "obj2 : ".$obj2->getMsg()."\n";
echo "obj3 : ".$obj3->getMsg()."\n";

echo "処理を終了しました\n";
?>

PHP5版  Singletonパターンの実行結果
処理を開始しました
インスタンスを生成しました
obj1 : $obj1 = Singleton::getInstance()
インスタンスは既に存在します
obj1 : $obj2 = Singleton::getInstance()
obj2 : $obj2 = Singleton::getInstance()

Fatal error: Call to private Singleton::__construct() from context '' in C:\Singleton.php on line 50

   上記のとおり、PHP5版Singletonパターンでは、PHP4版Singletonパターンにおける問題が解消されています。PHP4では変数やメソッドに対するアクセス制限を行えなかったため、Singletonクラスを直接オブジェクト化することが可能でした。つまり、PHP4では開発者に対してgetInstanceメソッドの利用を強制することができなかったため、Singletonパターンでは本来許されない全く別のSingletonオブジェクトが生成される可能性がありました。

   一方、PHP5では変数やメソッドに対してアクセス制限を行えるため、上記「PHP5版Singletonパターンの実行結果」をご覧のとおり、開発者はSingletonクラスを直接オブジェクト化することができません。これによって開発者の意識やスキルに依存することなくオブジェクトを生成する個数を制限し、オブジェクトを再利用するというSingletonパターンの目的をPHP5によって実現することができます。

1   2  3  次のページ



著者プロフィール
株式会社ワイズノット  土橋 芳孝
以前はJavaを利用したWebアプリケーション開発とオブジェクト指向設計を得意としていたが、ワイズノットに入社以来、PHPの魅力にとりつかれる。現在はワイズノットのプロジェクトマネージャーとして、PHPをはじめとしたオープンソースの普及に力を注いでいる。


INDEX
第5回:PHP5のオブジェクト指向
PHP5版  Singletonパターン
  PHP5版 例外処理
  PHP5版 Template Methodパターン