我为什么最简单的事情无法正常工作。
我想要的只是访问包含文件中声明的变量。
我有一个名为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()进行检查,但它也没有变量。但是我能够在包含的文件中看到它们
自从两天以来,我一直在努力使这个简单的事情发挥作用,但我在所有文件中妥协并复制了粘贴数据库连接代码。
答案 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个可能的原因
答案 3 :(得分:1)
您可以使用singleton pattern或在数据库类中设置变量static。
答案 4 :(得分:0)
好吧,我弄明白了这个问题。问题在于amfphp框架。这个框架包括我的所有文件(something.php)。很难解释它,但简单来说,我在与amfphp框架相关的主要php文件之一中包含了database.php。
谢谢你的建议。