一旦加载PHP就会运行

时间:2016-12-20 17:35:04

标签: php oop

我试图得到一个:" 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一般都很新,所以任何信息都非常受欢迎

3 个答案:

答案 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']);