我怀疑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;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来我创建了一个名为test.php的文件:
require('MySingleton.php');
$foo = MySingleton::getInstance();
$bar = MySingleton::getInstance();
$baz = MySingleton::getInstance();
Run Code Online (Sandbox Code Playgroud)
当我在我的localhost上运行test.php脚本时,我在Apache错误日志中得到一个条目,这使它看起来像它应该做的那样.但是,每次我在浏览器中刷新页面时,我都会在错误日志中获得另一个条目,这意味着PHP正在实例化一个新对象.
有什么我可以做的不同,使这个类返回一个持久的对象的单个实例?(即单身人士应该做什么).
请不要回答你认为单身人士不好的所有原因.我已经熟悉那些谈话要点了.
提前致谢!
Tho*_*ley 14
PHP是无状态的.在每个请求中,应用程序都会被构建并拆除.在这种情况下,您的单例在整个应用程序过程中只实例化一次 - 即每次请求一次.
与Java相比,你有一台服务器,比如Tomcat或Jetty,可以将对象加载到内存中.在这种情况下,您的单例将在多个请求中存活...直到服务器重新启动.
归档时间: |
|
查看次数: |
2370 次 |
最近记录: |