Как установить глобальную переменную, доступную во всем приложении

Я разработал страницу PHP с такой глобальной переменной;

global $amty_imgCache; $amty_imgCache = array(); $GLOBALS["amty_imgCache"]=$amty_imgCache; 

Эта страница имеет функции добавления / удаления записей в / из этого массива.

Я вызывал функцию на странице PHP с PHP, чтобы отобразить ее счетчик и поместить некоторые элементы в этот глобальный массив;

 Count <?php echo amty_getImageCacheCount(); ?> <?php amty_putIntoImageCache(100,0); ?> Count <?php echo amty_getImageCacheCount(); ?> 

Но при каждом обновлении сначала отображается count 0 then 1.

Как можно сохранить значения глобальной переменной во всем приложении.

Используйте APC или memcache для хранения таких значений. Вы можете не только получать доступ к этим значениям с любой страницы, но также получать доступ с любого сервера.

Вы не можете сохранять переменные во время выполнения страниц, не сохраняя их в каком-либо постоянном хранилище.

Если вам нужно сохранить переменную только для определенного пользователя, используйте сеанс, используя session_start(); и затем используя $_SESSION;

Если это для всего приложения, вы должны изучить использование базы данных или сохранение данных в файл. Если вы сохраняете файл, сверьтесь с serialize() и unserialize() который позволит вам сохранить состояние ваших переменных в текстовом представлении.

У тебя что-то не так.

Все переменные в php вне функции или класса являются глобальными переменными!

Чтобы использовать глобальную переменную в функции и изменить ее значение, используйте global -Keyword в функции

 $amty_imgCache = array(); $amty_imgCache[] ="my_first_img.png"; function amty_getImageCacheCount() { global $amty_imgCache; echo "count is:" ,count($amty_imgCache); } 

Но это хранилище предоставляется только по одному запросу. Если вы хотите хранить вещи дольше, используйте session или database или file

PHP не имеет настойчивости на уровне приложений. Возможно, вам захочется взглянуть на Memcache для быстрого решения (если вы можете его установить, конечно).

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

 function amty_putIntoImageCache( $i, $j){ global $amty_imgCache; $amty_imgCache[ $i] = $j; } 

Во-вторых, почему вы не используете статический класс вместо глобальной переменной? Правильный дизайн для этого был бы использованием статического класса, например:

 class amty { static protected $images = array(); static public function put( $i, $j){ self::$images[$i] = $j; } } amty::put( 100,0); 

И (я думаю, это то, о чем вы просили), когда вы хотите использовать глобальную переменную во всем приложении на каждой странице (это означает, что после перезагрузки) вы должны использовать:

 session_start() // Be careful to use this just once $_SESSION['variable'] = 'This value will persist as long as session lives'; 

Сессия существует для одного пользователя / одного соединения (php генерирует идентификатор сеанса и сохраняет его (по умолчанию) в файлы cookie).

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

Хотя я думаю, что большинство ответов здесь уместны, я не нахожу их достаточно полными. PHP, безусловно, имеет настойчивость всего приложения только для того, что вам придется создавать такие переменные в самом PHP или модуле, который загружается, когда PHP сначала загружается вашим веб-сервером. Это означает расширение и перестройку самого PHP или, по крайней мере, создание и загрузку внешнего модуля.

Вы можете использовать сеансы PHP. Переменные сеанса являются суперглабильными и могут быть доступны в любом месте, пока вы не уничтожите сеанс. Вам просто нужно указать начало сеанса

  <?php session_start(); //...your code $_SESSION['variable']=$variable; //....your code ?> 

На странице вы хотите установить переменную, а затем можете использовать ее на одной странице следующим образом:

  <?php //.....your code $variable=$_SESSION['variable']; //....your code //always remember the destroy the session after the use of it session_destroy(); ?>