Статическая переменная PHP не работает должным образом - PullRequest
0 голосов
/ 13 октября 2008

Это пример от php.net:

<?php
function Test()
{
    static $a = 0;
    echo $a;
    $a++;
}
?>

А это мой код:

function getNextQuestionID()
{
    static $idx = 0;
    return $idx++;
}

И я использую его в JavaScript:

'quizID=' + "<?php echo getNextQuestionID(); ?>"

Возвращает 0 каждый раз. Почему?

Ответы [ 4 ]

5 голосов
/ 13 октября 2008

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

echo getNextQuestionID() . ", " getNextQuestionID() . ", " getNextQuestionID();

И ты поймешь, о чем я.

Статическая переменная живет только столько, сколько работает сценарий.

Причина, по которой он возвращает 0 при первом запуске вместо 1, заключается в том, что вы используете постфиксный оператор $ var ++ вместо префиксной версии - ++ $ var. Разница в том, что приращение применяется только при использовании оператора postfix после возврата функции, но если вы используете оператор префикса, оно применяется до того, как функция вернется.

1 голос
/ 13 октября 2008
session_start();
function getNextQuestionID()
{
    if (!isset($_SESSION['qNo'])) {
        $_SESSION['qNo'] = 0;
    } else {
        $_SESSION['qNo']++;
    }

    return $_SESSION['qNo'];
}
0 голосов
/ 18 марта 2016
function getNextQuestionID()
{
    if (!isset($idx)) {
        static $idx = 0; // OR -1, if you want to start with 0 (ZERO);
    }
    $idx++;
    return $idx;
}

echo getNextQuestionID().'<br />';
echo getNextQuestionID().'<br />';
echo getNextQuestionID().'<br />';
echo getNextQuestionID().'<br />';

возвращает 1,2,3,4

«статический» означает, что значение переменной сохраняется до тех пор, пока работает ваш скрипт (один вызов веб-сайта! Чтобы сохранить его после нескольких вызовов веб-сайта, вам понадобятся СЕССИИ). Если функция вызывается более одного раза, значение сохраняется и не инициализируется постоянно и, следовательно, может увеличиваться.

0 голосов
/ 13 октября 2008

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

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