PHP Global Vars

时间:2011-10-05 11:03:17

标签: php variables global

我为什么最简单的事情无法正常工作。

我想要的只是访问包含文件中声明的变量。

我有一个名为connection.php的文件,其中有一个名为MySqlDatabase的类。在文件的底部,我创建了类的实例,并将其分配给名为$ database

的变量
// filename database.php begin

class MySqlDatabase(){

// code goes here

}

$database = new MySqlDatabase();

// filename database.php end

现在我在something.php中包含了database.php,并试图像这样访问$ database变量

//something.php
require_once 'database.php';

function foo(){

global $database;

$sql = "some sql statement";
mysql_query($sql,$database->connection);
//and remainig code goes here...

}

当我运行something.php时,预计全局变量$ database应该在函数foo()中可用,但似乎变量为null,我测试了is_object()函数来检查对象是否可用但它返回假。

出于调试目的,我在database.php文件中添加了is_object()检查,它返回true。

此外,我尝试使用其他选项(如

)访问全局变量
$database =& $GLOBALS['database'];

但我仍然没有运气。然后我使用print_r()函数打印完整的$ GLOBALS数组,但它没有$ database变量,我也使用get_defined_vars()进行检查,但它也没有变量。但是我能够在包含的文件中看到它们

自从两天以来,我一直在努力使这个简单的事情发挥作用,但我在所有文件中妥协并复制了粘贴数据库连接代码。

5 个答案:

答案 0 :(得分:2)

我对你的代码做了一些改动,这对我有用。

database.php中

<?php
// filename database.php begin
class MySqlDatabase
{
    public $connection;
    function MySqlDatabase()
    {
        $this->connection= mysql_connect('HOST','USER','PASSWORD');
        mysql_select_db('databaseName',$this->connection);
    }
}
$database = new MySqlDatabase();
// filename database.php end
?>

something.php

<?php
require_once 'database.php';
function foo( )
{
    global $database ;
    $sql = "select * from tableName";
    $rs=mysql_query($sql,$database->connection);
    while($row=mysql_fetch_array($rs))
    {
        print_r($row);
    }
    //and remainig code goes here...
}
foo();
?>

您可能在错误的庄园中操纵$connection变量。

答案 1 :(得分:1)

如果您已包含该文件,请使用以下内容:

//something.php
require_once 'database.php';

   /* Function FOO starts a new scope and doesn't see database object declared in database.php 
    * Therefore, you pass on the database object from calling function and use that instead.
    */

function foo($dbObj){     

    $sql = "some sql stagement";
    mysql_query($sql,$dbObj->connection);
    //and remainig code goes here...

}

foo($database);

答案 2 :(得分:1)

只有3个可能的原因

  • $ database不在全局范围内定义
  • database.php不包含在文件中
  • 读者看不到的一些错字

答案 3 :(得分:1)

您可以使用singleton pattern或在数据库类中设置变量static。

答案 4 :(得分:0)

好吧,我弄明白了这个问题。问题在于amfphp框架。这个框架包括我的所有文件(something.php)。很难解释它,但简单来说,我在与amfphp框架相关的主要php文件之一中包含了database.php。

谢谢你的建议。