Глобальное ключевое слово PHP и $ GLOBALS не работают в версии 5.3 - PullRequest
0 голосов
/ 23 февраля 2010

Кажется, у меня возникла эта проблема после обновления до PHP 5.3 с 5.2.
Сайт запускает 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 ]

2 голосов
/ 23 февраля 2010

ОК, вот почему $ glob в Eclipse выглядит пустым в xdebug. Это ошибка в xdebug 2.0.5 при использовании с PHP 5.3. Смотри http://bugs.xdebug.org/view.php?id=376

Так что все сводится к тому, что PHP не может подключиться к MySQL ... (я не знаю почему, я включил php_mysql.dll, а журналы ошибок apache чистые, а phpinfo () показывает MySQL нормально)

Я сейчас на охоте в PHP.ini ...

1 голос
/ 23 февраля 2010

У меня были похожие проблемы при использовании глобалов во включениях. Я никогда не удосужился понять, к чему это действительно привело - иногда казалось, что у включений была своя сфера применения. (Конечно, это не может работать, если вы включаете файл из функции, потому что include будет наследовать область действия функции.)

Бьюсь об заклад, это работает, если вы используете один из них:

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

или

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

тот факт, что вы не можете видеть $GLOBALS в своем отладчике, возможно, потому что это не реальная переменная, а конструкция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...