我需要几个变量才能共享几个会话。为此,我认为我可以使用带有单顿模式的类存储变量的类,因此每个用户(会话(只需包括类并访问其数据即可。我继续进行以下方式:
<?php
require_once('team.php');
class Game {
private static $_instance = null;
private $team1;
private $team2;
public function getTeam($num) {
if ($num == 1) return $this->team1;
if ($num == 2) return $this->team2;
}
private function __construct() {
$this->team1 = new Team();
$this->team2 = new Team();
$this->team1->init_team(1);
$this->team2->init_team(2);
}
public static function getInstance() {
if(is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
}
?>
然后我尝试使用这样的课程:
$game = Game::getInstance();
$player = new Player();
...
$game->getTeam($team)->addPlayer($player);
这是一个问题:在展示其团队的所有成员时,来自同一个团队的两个球员都看不到。此外,当我在2个不同的会话上使用以下指令时:
spl_object_hash(Game::getInstance());
输出是不同的,而我期望它会一样,假设它像Java类的hashcodes一样工作。
在此问题上的任何帮助将不胜感激。感谢您的阅读。
运行PHP应用程序时,每个请求启动了应用程序的新实例。
您的代码正在运行您期望的方式,但是PHP无法运行您的期望。它与Java运行的方式不可媲美。
如果您要启动HTTP服务器以服务您的PHP应用程序,并且有10个并发访问者,则您会在服务器上看到10个新过程 - 每个访问者都包含应用程序的不同实例。
但是,如果您要在Java中创建HTTP服务器并有10个并发访问者,则只会看到1个过程。
如果您希望在PHP中具有持久数据,这些数据可以显示给不同的用户,则应查看诸如MySQL之类的存储系统。
每个页面运行都是不同的PHP应用程序。这意味着每个用户(在页面呼叫上(都使用他自己编译的App版本,此后将删除。
Singleton不是为此。只是为了确保只有一个对象实例。但是这个对象仅在单独编制的应用中"生存"。
您应该将数据库用于此类事物(或任何其他类型的存储(