我试图得到一个:" var = new class" ,但我需要这个变量在文件(或超全局)中是全局的,需要记住它。
<?php
include 'game.php';
include 'button.php';
include 'beurt.php';
include 'scores.php';
include 'round.php';
include 'speelveld.php';
include 'player.php';
include 'cells.php';
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
if (isset($_POST['Val']) && !empty($_POST['Val'])) {
$Val = $_POST['Val'];
}
switch ($action) {
case 'Start' :
echo"<script>alert('new game started')</script>";
$Game = new Game;
break;
case 'ButtonClickStart':
$Game->ButtonClickStart();
break;
case 'ButtonClickStop' :
$Game->ButtonClickStop();
break;
case 'ClickCell' :
$Game->ClickCell( $Val );
break;
// ...etc...
}
}
?>
我通过$ ajax调用此文件并尝试使其执行函数到类,但我似乎无法通过的是:&#34; $ Game = new Game();&#34;应该只执行onces并且需要记住它。我知道它可以通过以下方式完成:静态$ game =&#39;&#39; ,但是php似乎并没有像新的类一样喜欢静态。
起初我试图在包含下面声明$ Game,但这会导致它在每次通过Ajax调用文件时执行,将$ Game设置为构造值。
现在我想要解决的是,有没有办法在获得记忆时只执行一次$ Game = new Game(因此在功能完成后它不会丢失数据)并且能够使用var中的其他案件
案例开始由onload函数上的索引激活,但我似乎并不记得数据 另外作为最后一个注释我对php一般都很新,所以任何信息都非常受欢迎
答案 0 :(得分:0)
你的问题不是你的Game
变量在整个执行环境中全局存在(这非常简单,只需在脚本开头声明$Game
,并在你正在做的时候使用它),但你必须能够在用户会话中保存游戏对象。
你需要能够以某种方式序列化 Game对象并将其存储在数据库,cookie或其他地方,并且最好不要存储在会话变量中,因为,取决于{的大小{1}}对象和用户数量,您可能会快速耗尽资源。
答案 1 :(得分:-2)
您可以尝试将实例变量放在会话变量中,以便可以从任何地方访问它。
类似的东西:
session_start();
if(!isset($_SESSION['game'])) $_SESSION['game'] = new Game();
$Game = $_SESSION['game'];
答案 2 :(得分:-3)
正如bfhcf所说,您可以在会话中存储类的实例。这不是很理想(但是一个潜在的解决方案)因为使用全局变量被认为是一种不好的做法。
如果你想让它在所有事物(即课程)中保持全球化,你可以这样做:
session_start(); // makes sure you can set the session
// do all other checks ie if(isset....)
$Game = new Game(); // create a new instance of Game class
$_SESSION['game'] = serialize($Game); // store the Game class in a session
现在,该类存储在一个会话中,您可以在任何需要的地方访问该会话。
现在您可以访问&#34; Game&#34;来自其他文件的对象,如下所示:
// see if a game class already been set
if (isset($_SESSION['game'])
$Game = unserialize( $_SESSION['game'] ); // get the Game class back from the session
else
echo 'No previous instances of Game class found';
要删除已保存的游戏对象(会话),您可以执行以下操作:
unset($_SESSION['game']);