繁体   English   中英

PHP全局变量

[英]PHP Global Vars

我很沮丧,为什么最简单的方法不起作用。

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

我有一个名为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()函数进行了测试,以检查对象是否可用,但返回假。

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

我也尝试使用其他选项访问全局变量

$database =& $GLOBALS['database'];

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

为了使这个简单的事情生效,我从两天前就不知所措,但是我妥协了并在所有文件中复制粘贴数据库连接代码。

我对您的代码进行了一些更改,这对我来说很有效。

为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变量。

如果已包含文件,请使用以下命令:

//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);

只有3种可能的原因

  • $ database不在全局范围内定义
  • 并非以文件形式包含database.php
  • 读者看不见的一些错字

您可以使用单例模式,也可以在数据库类中将变量设置为static。

好吧,我发现了问题所在。 问题出在amfphp框架上。 这个框架包括了我所有的文件(something.php)。 很难解释,但简单地说,我将database.php包含在与amfphp框架相关的主要php文件之一中。

谢谢您的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM