2010-12-11 3 views
9

Я должен работать в двух разных файлах. один из них должен добавить новый элемент в массив каждый раз, когда вызывается, и массив должен быть доступен .what я сделал для него:глобальный массив в php

function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 

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

+0

Обратите внимание, что [globals почти всегда плохие] (http://c2.com/cgi/wiki?GlobalVariablesAreBad). – outis

ответ

11

То, что вы сделали, должно работать.

<?php 

function function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 
function1(); 
function1(); 
function1(); 
print_r($array); 

Test it.

Вы, наверное, есть еще одна проблема. Обратите внимание, что время жизни всех переменных - это текущий запуск вашего скрипта. Они не будут существовать в последовательном прогоне. Для этого вам нужно использовать некоторую настойчивость, такую ​​как сеанс, cookie, файловая система, база данных.

Для получения дополнительной информации отправьте свой полный код.

+0

ОК, поэтому лучше использовать сеанс для it.thanks. –

+2

Таким образом, множественные вызовы не выполнялись в одном и том же режиме? Я правильно понял проблему? –

+0

yes Alin, функции запускаются на новом http-запросе. Они не звонили в тот же run.it была моей ошибкой. –

5

Я немного смущен формулировкой вашего вопроса. Когда вы говорите: «Мне нужно работать в двух разных файлах». вы имеете в виду, что у вас есть «две» функции?

Если у вас есть две функции, которые пытаются использовать переменную $ array, вам нужно вызвать global $array; в обе функции.

Причина в том, что global немного вводит в заблуждение. Все, что он делает, это присвоение ссылки на члену $_GLOBALS переменной в локальной области, которая имеет то же имя, что и индекс $ _GLOBALS. Другими словами, если вы делаете что-то вроде этого:

global $variable; 

это по сути то же самое, говоря это:

$variable =& $_GLOBALS['variable']; (assign by reference) 

Фактическая переменная $variable еще областью действия на уровне функции, это просто происходит имеют ссылку на глобальную переменную.

Подразумевается, что если вы не определяете global $variable в каждой функции, вы просто создаете совершенно новую переменную в рамках этой функции. Когда функция заканчивается, переменная не работает, и любые изменения, внесенные в нее в функции, теряются.

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

+0

спасибо, моя проблема решена сейчас. –

+0

не должно быть '$ GLOBALS' вместо' $ _GLOBALS' –

Смежные вопросы