我怀疑 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 正在实例化一个新对象。
我可以采取不同的措施来使此类返回对象的持久单个实例吗? (即什么是单例supposed to do).
请不要回答您认为单身人士不好的所有原因。我已经熟悉这些谈话要点了。
提前致谢!
PHP 是无状态的。根据每个请求,应用程序都会被构建和拆除。既然如此,您的单例在应用程序的整个过程中只会实例化一次——即每个请求一次。
与 Java 之类的东西相比,在 Java 中,你有一个服务器,比如 Tomcat 或 Jetty,可以将对象加载到内存中。在这种情况下,您的单例将在多个请求中幸存下来......直到服务器重新启动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)