Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中不支持Singletton模式_Php_Session_Singleton - Fatal编程技术网

PHP中不支持Singletton模式

PHP中不支持Singletton模式,php,session,singleton,Php,Session,Singleton,我需要几个变量在几个会话中共享。为此,我想我可以使用一个带有存储变量的单例模式的类,因此每个用户(会话)只需包含该类并访问其数据。 我会按以下方法进行: <?php require_once('team.php'); class Game { private static $_instance = null; private $team1; private $team2; public function getTeam($num) { if ($nu

我需要几个变量在几个会话中共享。为此,我想我可以使用一个带有存储变量的单例模式的类,因此每个用户(会话)只需包含该类并访问其数据。 我会按以下方法进行:

<?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;
   }
}

?>
问题是:来自同一球队的两名球员在展示他们球队的所有成员时无法看到对方。此外,当我在两个不同的课程中使用以下说明时:

spl_object_hash(Game::getInstance());
输出是不同的,而我希望它是相同的,假设它像Java类的哈希代码一样工作


任何关于这个问题的帮助都将不胜感激。感谢阅读。

每个页面运行都是不同的PHP应用程序。这意味着每个用户(在呼叫页面上)都在使用自己编译的应用程序版本,该版本将在以后被删除

辛格尔顿:不是因为这个。这只是为了确保对象只有一个实例。但该对象仅“存在”于单独编译的应用程序中


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

运行PHP应用程序时,每个请求都会启动应用程序的新实例

您的代码按预期方式运行,但PHP并没有按预期方式运行。它无法与Java的运行方式相比

如果您要启动一个HTTP服务器来为PHP应用程序提供服务,并且您有10个并发访问者,那么您将看到10个新进程在您的服务器上运行——每个进程包含每个访问者的不同应用程序实例

然而,如果您要用Java创建HTTP服务器,并且有10个并发访问者,那么您只会看到1个进程


如果您希望在PHP中使用持久化数据,这些数据可以显示给不同的用户,那么您应该查看存储系统,如MySQL。

您是否认为这会以某种方式神奇地持久化到请求之间的会话中?了解statefull(java)和无状态(PHP)编程语言背后的概念。还可以阅读php中的
\uuuu wakeup()
\uuu sleep()
会话。你的问题听起来像是你站在一座高桥上说:从这里我一条鱼也看不见;-)这不是对单身模式的滥用吗?singleton模式的整体思想是,在任何给定的时间内,一个对象只能有一个实例,而不能用作某种上帝对象。。。为了在会话间共享数据,您可以使用持久存储(数据库)或使用$\u SESSION php super global。两个答案都可以接受,我必须随机选择一个作为“接受答案”:
spl_object_hash(Game::getInstance());