我一直怀疑 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();
当我在本地主机上运行 test.php 脚本时,我在 Apache 错误日志中得到一个条目,这使它看起来像它应该做的那样。但是,每次我在浏览器中刷新页面时,我都会在错误日志中看到另一个条目,这意味着 PHP 正在实例化一个新对象。
有什么我可以做不同的事情来让这个类返回一个持久的对象单实例吗?(即单例应该做什么)。
请不要以你认为单身不好的所有原因作出回应。我已经熟悉那些谈话要点。
提前致谢!