我有一个调用 php 对象以从数据库中取回一些数据的 html 页面。它工作正常,但脚本变得笨拙,所以我决定将其中的一些分解成一堆函数。
所以我有以下文件:
// htdocs/map.php
<?php
include("config.php");
include("rmap.php");
$id = 1;
$gamenumber = getGameNumber($id);
echo $gamenumber;
?>
// htdocs/config.php
<?php
$_PATHS["base"] = dirname(dirname(__FILE__)) . "\\";
$_PATHS["includes"] = $_PATHS["base"] . "includes\\";
ini_set("include_path", "$_PATHS[includes]");
ini_set("display_errors", "1");
error_reporting(E_ALL);
include("prepend.php");
?>
// includes/prepend.php
<?php
include("session.php");
?>
// includes/session.php
<?php
includes("database.php");
class Session {
function Session() {
}
};
$session = new Session;
?>
// includes/database.php
<?php
include("constants.php");
class Database {
var $connection;
function Database() {
$this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());
}
function query($query) {
return mysql_query($query, $this->connection);
}
};
/* Create database connection */
$database = new Database;
?>
// includes/rmap.php
<?php
function getGameNumber($id) {
$query = "SELECT gamenumber FROM account_data WHERE usernum=$id";
$result = $database->query($query); // line 5
return mysql_result($result, 0);
}
?>
常量中有很多定义(DB_USER 等)。
因此,map.php 包含 config.php。这又包括 prepend.php,其中包括 session.php 和包括 database.php。map.php 还包括尝试使用该database
对象的 rmap.php。
问题是我得到一个
致命错误:在第5行调用C:\Develop\map\includes\rmap.php中非对象的成员函数
造成这种情况的通常原因是 $database 对象没有被创建/初始化,但是如果我添加代码来显示当(通过echo "DB connection created";
和echo "using DB connection";
)它们被调用(或至少显示)时,它们以正确的顺序被调用。
如果我添加include("database.php")
到 rmap.php,我会收到关于重新定义 constants.php 中的内容的错误。如果我使用require_once
我会得到与以前相同的错误。
我在这里做错了什么?