PHP全局关键字和$ GLOBALS似乎不适用于5.3版本

时间:2010-02-23 13:14:54

标签: php global-variables global

从5.2升级到PHP 5.3后,我似乎遇到了这个问题 该站点运行index.php,其中包括()各种其他实用程序函数,然后包含基于GET变量值的正确页面。

现在有一点我无法理解的是,在xdebug中我没有看到 $ GLOBALS 。 另一位是 -

的index.php:

include_once('includes/global.inc.php');  
include_once("classes/db.inc.php");  
$db = new db();  

global.inc.php:

$glob['dbusername'] = 'myusername';  
$glob['dbpassword'] = 'mypassword';
//etc  

db.inc.php声明了一个名为db:

的类
class db  
{  
 function db()  
 {  
  global $glob;  
  $this->db = @mysql_connect($glob['dbhost'], $glob['dbusername'], $glob['dbpassword']);  
 }  
} // end of db class  

问题是,如果我在db()中放置一个断点,我看不到$ glob,调试器说它未初始化。

2 个答案:

答案 0 :(得分:2)

好的,这就是为什么$ glob在Eclipse上的xdebug中显示为空的原因。当与PHP 5.3一起使用时,这是xdebug 2.0.5的一个错误。见http://bugs.xdebug.org/view.php?id=376

所以归结为PHP无法连接到MySQL ......(我不知道为什么,我启用了php_mysql.dll和apache错误日志是干净的,phpinfo()显示MySQL好吧)

我现在正在寻找PHP.ini ......

答案 1 :(得分:1)

在include中使用globals时遇到过类似的问题。我从来没有真正理解它到底是什么 - 有时看起来包括它们有自己的范围。 (当然,如果从函数中包含文件,它就无法工作,因为include将继承函数的作用域。)

我敢打赌,如果你使用其中一种,它会起作用:

global $glob;
$glob['dbusername'] = 'myusername';  
$glob['dbpassword'] = 'mypassword';

$GLOBALS["glob"]['dbusername'] = 'myusername';  
$GLOBALS["glob"]['dbpassword'] = 'mypassword';

您在调试器中看不到$GLOBALS的事实可能是因为它不是真正的变量,而是构造。