Как сделать массив глобальным???

Mamont

Guest
Как сделать массив глобальным???

Сразу попрошу не отвечать на мой вопрос типа: global $arr...

Вопрос:
У меня есть фаил: index.php
В нем есть фаил test1.php и test2.php
В test1.php у меня определяется массив двумерный с данными.
В test2.php я его использую. В php.ini выключены глобальные переменные...тоесть в php.ini - register_globals = false;
мдя так на всякий случай пхп 4-го поколения :)

Так вот как мне сделать массив глобальным чтоб я мог его везде юзать.

Сразу скажу что я знаю о существовании ООП поэтому этот вариант просьба не приблагать он работает но он не рациональный и малоподходящий в данной ситуевине.

Да еще людям которые не понимают то о чем я пишу выше просьба не отвечать лишьбы ответить...поверьте мне я не ламер и вариант типа а он сам должен работать не канает :(

Если эта тема не канает для этого раздела то просьба господам координаторам перекинуть ее в нужный просто в ПХП для проффесионалов мне ее както неловко кидать...но большинство реальных программеров мне не ответило :(

Жду ответов и надеюсь что не все так запущенно :(
 

Кром

Новичок
Все, на самом деле, очень запущено.

>У меня есть фаил: index.php
>В нем есть фаил test1.php и test2.php

1. Просьба изьяснятся понятнее.

> В php.ini выключены глобальные переменные

2. Ты неправильно понимаешь за что отвечает register_globals

3. ООП тут не при чем.
 

TeeM

Guest
Попробуем угадайку....
может так?
PHP:
if($_REQUEST["array"]){$array=$_REQUEST["array"];}
 

Demiurg

Guest
>где прочитать почему?
в последующих ответах.
 

Gas

может по одной?
1. Поключать файл с массивом в скрипты где он нужен
2. почитать это
 

svetasmirnova

маленький монстрик
PHP:
$GLOBALS['a'] = array(1,2,3);
function c() {
    array_push($GLOBALS['a'], 4);
}
function b() {
    var_dump($GLOBALS['a']);
}
c();
b();
 

Mamont

Guest
ПРив сем уважении к Gas ссылка неправельная :(

Кром Может быть и неправельно я чето понимаю...
Вообщем если по простому то проблема такая я массив задаю в одном файле а юзаю его в другом...и в другом я его просто не вижу :( а мне очень надо потомучто я этот массив юзаю во многих других файлах...система сайта построена на инклудах...тоесть есть файлы в которых хранится вся база есть рабочие файлы которые все это юзают и есть как бы файлы транспорты которые просто обеспечивают подстановку нужных файлов первой и второй категории... Вот а про регистер_глобалс я написал потомучто гдето прочитал про это и не хотел чтоб умники всякие писали типа включи регистер_глобалс...вот и все вообщемто :)

Демиург - я приятно удивлен твоим появлением...я думал ты совсем отдалился от мира простых... :)

svetasmirnova - спасибо за пример но я не до конца если чесно его понимаю...можешь обьяснить в общих чертах хотябы? Да и еще у меня массив двумерный причем первый раздел у меня неассоциативный а второй асоциативный...и там много ньюансов...вот пример как я его задаю:
PHP:
$r=mysql_query("select * from main_seller");
for($i=0; $i<mysql_num_rows($r); $i++)
{
$f=mysql_fetch_array($r);
if($f[type] == 2){$MAIN_SELLER[0]["loggin"] = $f["field_name"]; $MAIN_SELLER[0]["loggin_description"] = $f["description"];}
else if($f[type] == 3){ $MAIN_SELLER[1]["password"] = $f["field_name"]; $MAIN_SELLER[1]["password"] = $f["description"];}
else if($f[type] == 4){ $MAIN_SELLER[2]["email"] = $f["field_name"]; $MAIN_SELLER[2]["email_description"] = $f["description"];}
else if($f[type] == 5){ $MAIN_SELLER[3]["company"] = $f["field_name"]; $MAIN_SELLER[3]["company_description"] = $f["description"];}
else { $MAIN_SELLER[$k]["name"] = $f["field_name"]; $MAIN_SELLER[k]["description"] = $f["description"]; $k++;}
}
// global $MAIN_SELLER;

// make MAIN_INVENTORY mass.

$k=1; 
$r=mysql_query("select * from main_inventory");
for($i=0; $i<mysql_num_rows($r); $i++)
{
$f=mysql_fetch_array($r);
if($f[type] == 2){ $MAIN_INVENTORY[0]["quantity"] = $f["field_name"]; $MAIN_INVENTORY[0]["quantity_description"] = $f["description"];}
else { $MAIN_INVENTORY[$k]["name"] = $f["field_name"]; $MAIN_INVENTORY[k]["description"] = $f["description"]; $k++;}
}

// make MAIN_PRODUCTS mass.
$k=0;
$r=mysql_query("select * from main_products");
for($i=0; $i<mysql_num_rows($r); $i++)
{
 $f=mysql_fetch_array($r);
$MAIN_PRODUCTS[$k] = $f["name"];
}
} // end of main function
} // end of class
вот это мой код...проблема в том что я беру все данные из баз и массив очень обширный получается...но он мне очень нужен.

Я его вот так делаю...и в других файлах мне его не видно :(

Поэтому буду очень благодарен за толковую помощь...

-~{}~ 19.11.04 20:35:

Последние две строчки я случайно вставил это я просто в ООП все пытаюсь сделать.
Пример работает и пожалуста не надо искать в нем ошибки...просто подскажите мне пожалуста как его заставить везде работать...
Может это когонить на мысль верную наведет...
 

svetasmirnova

маленький монстрик
Как я поняла, Gas дал ссылку на раздел мануала под названием "Область видимости переменной".
У меня эта ссылка работает :)

По поводу примера.
1. Всё-таки прочитай раздел "Область видимости переменной".
2. Так как все переменные в PHP по умолчанию локальные, у нас есть 3 альтернативы:
1) использовать global
2) использовать статические переменные класса, так как у классов глобальная область видимости (в PHP4 эмулируется одним из методов класса PEAR)
3) использовать суперглобальные массивы, такие как $GLOBALS. (Можно $_POST, $_GET и т.д., но получится путаница)

То есть вместо
PHP:
$a = array(1,2,3);
пишем
PHP:
$GLOBALS['a'] = array(1,2,3);
и используем эту переменную как обычно.
Глубина массива значения не имеет.
Название переменной только чуть длиннее будет:)
 

Кром

Новичок
svetasmirnova, из всех предложенных варантов, единственный правильный это пункт 1.
Пункт 2.1 относится к пункту 1.
Пункт 2.2 Лучше вообще не упоминать. Создавать класс, чтобы потом эмулировать в нем глобальную область видимости это извращение.
Пункт 3, на сегодняшний момент - плохой стиль программирования. Применят его можно, когда знаешь - зачем. К Mamont это не относится.
 

svetasmirnova

маленький монстрик
Кром
из всех предложенных варантов, единственный правильный это пункт 1
Да уж, но раз взялась отвечать:confused:
Слезу он у меня вышиб!
А тут ещё Фанат тему про таких, как я, создал:
http://phpclub.ru/talk/showthread.php?threadid=58819&goto=newpost
(Serguitar ;))
Хотя насчёт $GLOBALS ...
У меня, например, память девичья и я легко могу забыть, что в какой-то функции использовала global и переименовать или, хуже того, убить global переменную уже через неделю после написания функции (а не через месяц, как в умных книжках пишут;) ) С $GLOBALS не забудешь.
 

Фанат

oncle terrible
Команда форума
Фанат в эту тему и не заходил, полагая, по названию, ее элементарность. Думал, что ответят быстро - и дело с концом.
А она опять всплыла.

Однако, и зайдя, я не понимаю, что я должен знать?
Как сделать переменную глобальной?

Вроде бы, проблема решается элементарно - если массив должен быть виден (то есть - ЧИТАТЬСЯ) во всех файлах проекта, то его просто записывают в файл, который инклюдится везде, во все скрипты приложения.
В тот же, в котором прописаны параметры подключения к базе.
И он будет доступен везде.
вроде бы, это очевидно.
но раз спор продолжается, то я, видимо, проблемы не понял.

-~{}~ 20.11.04 17:47:

но большинство реальных программеров мне не ответило
вот эта фраза меня порадовала.
Так и представляю себе малолеток, типа алеш.ру, с большой надписью на лбу и всех частях тела "реальный программер", которые за пивком, поплевывая, обсуждают свои Реальные Программерские Проблемы.

-~{}~ 20.11.04 17:52:

Хотя проблема, опять же - не какая-то конкретная, типа написать global, а понимания - что такое пхп скрипт, и как он работает.
Но кого это волнует? Для решения проблемы надо не самому напрячься и подумать, а должен прилететь добрый дядя в голубом вертолете, показать Правильный Код и все встанет на свои места.
Вроде взрослые люди уже, а в сказки верят - как дети...
 

Mamont

Guest
svetasmirnova
Спасиба за участие...
Блин я тут поэму целую написал а оно сказало много смайликов и все ушло в горы :(

Фанат
В двух словах повторю...
Сэнк ю за заботу конеша...но там трабла немного в другом :)

Всем спасиба.
С уважением.
Я.
 
Сверху