PHP4 シングルトンの罠

 シングルトンでクラスをインスタンス化するときにリファレンスで受け取るとしくじる。

 これが何でなのか分からなかった。

 PHP4 は =& で受け取らないとインスタンスのコピーを受け取っちゃうから、激しく不満なんですが。

 バグですか?

http://jp2.php.net/manual/ja/language.references.whatdo.php

ダメパターン

piyo;
		echo "\n";
	}
}


for ($i=0; $i<10; $i++) {
	$hoge =& hoge::fuga();
	$hoge->view();
}

成功パターン

piyo;
		echo "\n";
	}
}


for ($i=0; $i<10; $i++) {
	$hoge =& hoge::fuga();
	$hoge->view();
}

PHP マニュアルに書いてありました

http://jp2.php.net/manual/ja/language.variables.scope.php

類似の動作がstatic命令にも適用されます。 リファレンスは静的に保存することができません。

 野暮ったいのお。

 というかそれなら無理にstatic スコープ外すとか変なことせずに、エラー出すとかすべ。

ちょっと待て

 static がリファレンスを保存できないなら、PHP5 では上記のスクリプトはいずれもうまくいかないはずだ。

 だが試したところPHP4 と同じ結果になった。矛盾してんべな。

 つまりstatic はリファレンスを代入できないのではなく、=& で代入するとスコープをstatic ではなくローカルに切り替えるって処理かと思われ。