单位模式在PHP中不符合尊重



我需要几个变量才能共享几个会话。为此,我认为我可以使用带有单顿模式的类存储变量的类,因此每个用户(会话(只需包括类并访问其数据即可。我继续进行以下方式:

<?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不是为此。只是为了确保只有一个对象实例。但是这个对象仅在单独编制的应用中"生存"。

您应该将数据库用于此类事物(或任何其他类型的存储(

最新更新