Помогите с глобальностью переменных

Mysterious

Новичок
Помогите с глобальностью переменных

Проблема следующая.
Файл с переменными подключается при помоши инклюда
PHP:
include("config.php");
в этом файле находится асиоциативный масив
PHP:
$CONFIG['dbhost']="localhost";
$CONFIG['dbuser']="111";
$CONFIG['dbpass']="111";
$CONFIG['dbdatabase']="xxx";
$CONFIG['dbprefix']="xxx_";
Затем вызывается функция и переменная определяется как глобольная:
PHP:
function MySQLConnect()
{
	global $CONFIG;
	echo("1".$CONFIG['dbhost']." ".$CONFIG['dbuser']." ".$CONFIG['dbpass']." ".$CONFIG['dbdatabase']);
}
Но в итоге прога не видит масив CONFIG и не выдаёт его значений. Что делать? Может в конфиге PHP чего-то не так?
 

kvf77

Red Devil
Mysterious

Почему не сделать массив глобальным?
$GLOBALS['config']['xxxx']
и он будет виден везде без всяких global
 

vafel

Новичок
может файл с конфигом инклудится после работы функции MySQLConnect ?
 

Mysterious

Новичок
Замечательно!
Но почему-же всётаки не работает функция global ?
 

kvf77

Red Devil
vafel
ну если уж на то пошло - не после функции, а после ее вызова
 

kvf77

Red Devil
Mysterious
тогда приведи код включая вызов функции коннект (тока лишнего кода не надо)
 

Mysterious

Новичок
Автор оригинала: kvf77
Mysterious
тогда приведи код включая вызов функции коннект (тока лишнего кода не надо)
Пожалуста:

PHP:
include("config.php");
include("mysqlfunctions.php");
MySQLConnect();
...
Далее из файла mysqlfunctions.php

PHP:
function MySQLConnect()
{
	global $CONFIG;
	echo("1".$CONFIG['dbhost']." ".$CONFIG['dbuser']." ".$CONFIG['dbpass']." ".$CONFIG['dbdatabase']);
...
 

kvf77

Red Devil
Mysterious

сделай перед вызовом функции MySqlConnect
var_dump($CONFIG);
 

Mysterious

Новичок
Если перед функцией то выдаёт значения переменной
а в функции пишет NULL :(
 

alpine

Новичок
Mysterious
Почему бы не сделать так:
PHP:
include("config.php"); 
include("mysqlfunctions.php"); 

MySQLConnect($CONFIG);

//////////////////////////////////////////////////////////////////////
function MySQLConnect($CONFIG) 
{ 
    echo("1".$CONFIG['dbhost']." ".$CONFIG['dbuser']." ".$CONFIG['dbpass']." ".$CONFIG['dbdatabase']); 
...
И еще тут почитай, пригодится:
PHP FAQ: Ничего не работает! Что делать???
 

CFR

Guest
Господа, это не решение.
Столкнулся с аналогичной проблемой. Я нашел, ПОЧЕМУ, но я не знаю, как это исправить.
Локализация показала:
1) если переменная впервые объявлена не в функции (т.е. например Index.php запущен и пошел, можно до этого функции вызывать, можно после, но сама переменная $myvar объявлена именно в линейно идущем файле (можно и в заинклюденном, но НЕ в функции), то последующее global $myvar сделает ее доступной где угодно, в какой угодно функции, хоть в файле, заинклюденном до ее объявления (в функции, вызванной после объявления есссно).
2) а вот если переменная $myvar впервые объявлена в какой-либо функции, и после этого _из нее_ делается вызов другой функции, и там уже global $myvar - хрен. При этом вызываемые функции могут быть хоть из того же файла.

Между прочим, в мануале ничего не сказано, что глобальные переменные должны быть объявлены в "первичном потоке", а не в функции.

Можете проверить мою гипотезу. (два примера ниже)
первый пример - rrt.php - переменная в файле "сразу", все работает
<?
$myvar="YES!!! IT IS!!!";
echo "FROM MAIN THREAD, BEFORE FUNCTION: myvar=$myvar<br>";
test();
echo "FROM MAIN THREAD, AFTER FUNCTION: myvar=$myvar<br>";

function test()
{
global $myvar;
echo "FROM FUNCTION: global myvar=$myvar<br>";

}

?>
======================
и второй пример: rry.php - переменная в функции, _из нее_ вызывается вторая функция, и она не видит глобальную $myvar
<?
f1();

function f1()
{
$myvar="YES! IT IS!!!";
echo "FROM F1(), BEFORE FUNCTION: myvar=$myvar<br>";
f2();

}
function f2()
{
global $myvar;
echo "FROM F2(), CALLED FROM F1(): global myvar=$myvar<br>";

}
Для особо критичных: перенос функции в начало файла результата не дает.
?>
 

SiMM

Новичок
CFR, иногда лучше читать. Чем нести бред.
Читать мануал, конечно же.
[m]language.variables.scope[/m]
Кстати оба кода ведут себя полагающимся им образом.
 

CFR

Guest
Ну и че? ДО того, как это написать, прочитал уже раз 50. И не только это.
Про то, что глобал в функциях, вызываемых из функций где объявлена переменная, не должен работать, там ни слова нет.
Человек, создавший эту тему, имел аналогичную проблему - решения так никто и не предложил, предложили только через одно место. Я спрашиваю, где написано, что global в функции, вызванной из функции, где объявлена переменная, не должен видеть переменную? ВЫЗЫВАЮЩАЯ - (main) да, не должна. f2 (по тому, куда вы меня ткнули) - должна.
Apache 1.3.22 PHP 4.3.6 - Windows( denwer)
Apache 1.3.33 PHP 4.3.9 - Unix (хостинг) - полагающимся по мануалу образом они себя ни там, ни там не ведут.
 

Фанат

oncle terrible
Команда форума
чудик.
где в первой функции у тебя global?
ты бы фитилёк-то прикрутил. выглядишь полным [censored] со своими поучениями.
 

Нечто

Психолог РНРClub
CFR
То есть ни малейших сомнений в своей правоте, в состоянии читать и осознавать прочитанное ты не испытываешь?

оба кода ведут себя полагающимся им образом
Если ты не в состоянии объяснить этого, прочитав ман, то лучше не отвечай больше в эту тему.
 

Фанат

oncle terrible
Команда форума
он не отвечает.
он спрашивает.
но - парадокс - считает отвечающих дураками.
 
Сверху