PHP シングルトンは本物のシングルトンではないのではないかと疑っていたので、テストを行いました。次のクラスを作成しました。
class MySingleton {
private static $instance;
private function __construct()
{
error_log("I am a new instance of MySingleton. I was instantiated at " . time());
}
private function __clone(){}
public static function getInstance()
{
if(!is_object(self::$instance)) {
self::$instance = new MySingleton();
}
return self::$instance;
}
}
次に、test.php というファイルを作成しました。
require('MySingleton.php');
$foo = MySingleton::getInstance();
$bar = MySingleton::getInstance();
$baz = MySingleton::getInstance();
localhost で test.php スクリプトを実行すると、Apache エラー ログに 1 つのエントリが表示されます。ただし、ブラウザーでページを更新するたびに、エラー ログに別のエントリが表示されます。これは、PHP が新しいオブジェクトをインスタンス化していることを意味します。
このクラスがオブジェクトの永続的な単一インスタンスを返すようにするために別の方法でできることはありますか? (つまり、singleton がすべきこと)。
シングルトンが悪いと思う理由をすべて答えないでください。私はすでにそれらの論点に精通しています。
前もって感謝します!