Совместное использование одноэлементного объекта PHP между разными пользователями

Я работаю над веб-приложением, которое позволяет пользователям войти в систему и назначить экзамен, назначенный администратором. У меня есть функция «накапливать», которая должна запускаться автоматически после того, как все пользователи закончат тестирование и обновят базу данных (согласно некоторой логике).

Я знаю, что могу использовать базу данных, чтобы сохранить хранилище пользователей, которые проводят тестирование, и, соответственно, запустить логику, но мне интересно знать, может ли это сделать одноэлементный класс.

Мой код:

class ScoreBoard{
var $current;
private static $board=NULL;
// private static $current=0;
private function __construct() {
$this->current=0;
}
static function scoreboard(){
if(!self::$board){
self::$board= new ScoreBoard();
$this->log("Created new");
// return self::$board;
}
return self::$board;
}
function add(){
$this->current+=1;
$this->log("add ".$this->current);
}
function subtract(){
$this->current-=1;
$this->log("subtract ".$this->current);

// file_put_contents("scoreboard.txt",self::$current);
if($this->current<0)
$this->current=0;
if($this->current<=0)
{
$this->accumulate();
self::$board=NULL;
}
}
}

И в startExam.php файл я вызываю эту функцию как:

$scoreboard= ScoreBoard::scoreboard();
$scoreboard->add();

И делать

$scoreboard= ScoreBoard::scoreboard();
$scoreboard->subtract();

когда экзамен заканчивается. Таким образом, когда каждый пользователь начинает экзамен, одиночные объекты add функция должна быть вызвана, и когда он заканчивает subtract функция должна быть вызвана. Но это не работает по какой-то причине, и $current никогда не увеличивается за пределы 1.

Пожалуйста, дайте мне знать, возможно ли то, что я пытаюсь сделать, или нет. И если есть какие-то лучшие способы добиться того, что я хочу сделать. Спасибо.

2

Решение

Вы могли бы использовать Memcached для достижения этой цели —

Ваша функция конструктора будет выглядеть примерно так:

$this->memcache = new Memcached();
$this->memcache->addServer("127.0.0.1", "11211") // I think that's the right port for default.
$this->current = $this->memcache->get("current");

Но вы можете сделать ту же логику, сохранив значение в файле — и это будет проще …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]