我有一个" game.php"使用以下代码:
<?php
include("database.php");
class Game {
var $gameinfo;
var $gameid;
var $players;
function __construct($gameinfo) {
$this->gameinfo = $gameinfo;
$this->gameid = $gameinfo["gameid"];
$this->players = $database->getUserInfosByGameID($this->gameid);
...
和&#34; database.php&#34;使用以下代码:
<?php
include("constants.php");
class MySQLDB {
... constructor etc
function getUserInfosByGameID($gameid) { }
}
// Create database connection
global $database;
$database = new MySQLDB();
现在在创建新游戏对象时会抛出错误
&#34;变量$ database未在game.php第12行&#34;
中定义
即使在&#34; api.php&#34;它的工作原理如下:
<?php
// check for POST method
if($_SERVER["REQUEST_METHOD"] != "POST")
die();
include("include/database.php");
// get json data
$stream_data = file_get_contents('php://input');
$json = json_decode($stream_data) or die("{valid=false}");
// if session in $json try to get user object from DB
if(isset($json->session))
$sessionuser = $database->confirmUserSession($json->session);
我做错了什么?我还尝试在没有全局的情况下定义$ database,这也适用于&#34; api.php&#34;。
答案 0 :(得分:2)
您应该在构造函数中声明全局$database
,以便该方法可以访问该变量。
function __construct($gameinfo) {
global $database;
$this->gameinfo = $gameinfo;
$this->gameid = $gameinfo["gameid"];
$this->players = $database->getUserInfosByGameID($this->gameid);
修改强>
以下是关于此主题的官方docs。
答案 1 :(得分:1)
将全局变量放在MySQLDB
之前,因为类MySQLDB
会查找$database
。
<?php
global $database;
include("constants.php");
class MySQLDB {
... constructor etc
function getUserInfosByGameID($gameid) { }
}
// Create database connection
$database = new MySQLDB();