【发布时间】:2012-01-04 13:06:56
【问题描述】:
这就是我设置单身人士的方式
<?php
class MySingleton
{
private static $instance;
private static $you;
private function __construct()
{
$this->you = "foo";
}
public static function singleton()
{
if (!isset(self::$instance)) {
$className = __CLASS__;
self::$instance = new $className;
}
return self::$instance;
}
public function getYou()
{
return $this->you;
}
public function setYou($val)
{
$this->you = $val;
}
}
?>
在file1.php,我这样做:
require_once('session.php');
$session = MySingleton::singleton();
$session->setYou('bar');
echo $session->getYou(); //echoes 'bar'
在 file1.php 中,我有一个指向 file2.php 的超链接,其中有以下代码:
require_once('session.php');
$session = MySingleton::singleton();
echo ($session->getYou()); //prints 'foo' which gets set in the constructor
它似乎正在为 file2 创建一个新实例,这就是为什么 $you 具有默认值 foo。我哪里错了?为什么我没有得到我在 file1.php 中使用的实例?
【问题讨论】:
-
不幸的是,使用会话不是一个选项。该应用程序正在使用长轮询,这导致
session_start需要超过 30 秒的时间才能执行。我希望改用单例。我想我可以使用 cookie -
尝试使用 cookie,但同样的问题。这很有意义,因为 cookie 也使用文件。谢谢您的帮助。如果我无法弄清楚,我将创建另一个问题
-
尝试使用信号量、共享内存或键/值存储代替
标签: php oop design-patterns singleton