Как установить глобальную переменную, доступную через приложение - PullRequest
5 голосов
/ 21 января 2012

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

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

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

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

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

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

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

Ответы [ 7 ]

5 голосов
/ 03 октября 2012

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

3 голосов
/ 21 января 2012

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

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

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

2 голосов
/ 21 января 2012

Вы ошиблись.

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

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

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

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

1 голос
/ 21 января 2012

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

0 голосов
/ 29 апреля 2015

Вы можете использовать сеансы 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();
    ?>
0 голосов
/ 16 февраля 2014

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

0 голосов
/ 21 января 2012

Прежде всего, когда вы используете глобальные переменные в функции, вы должны использовать либо 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 генерирует идентификатор сессии и сохраняет его (по умолчанию) в куки).

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

...