PHP"全球" __construct

时间:2016-07-09 16:57:16

标签: php variables include undefined

我有一个" 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;。

2 个答案:

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