Сбрасывает статическую переменную - PHP - PullRequest
0 голосов
/ 18 сентября 2011

По какой-то причине моя static переменная сбрасывается, и я не уверен, почему она сбрасывается.

public static $_pwdAdjId = 0; //static variable

function ...() {
// Piece of code that manipulates the static variable
if(isset($_POST['adj'])) {
    self::$_pwdAdjId = $_POST['adj'];
} else if(!isset($_POST['adj']) && $_GET['ajax'] !== 'assignTable') {
    self::$_pwdAdjId = Yii::app()->user->getId();
}
$adj = self::$_pwdAdjId;
...
}

Когда функция вызывается впервые, она будет вызываться:

self :: $ _ pwdAdjId = Yii :: app () -> user-> getId ();

и сохраняет значение в $adj и работает нормально.

Когда пользователь изменяет страницу, значение, которое сохраняется в $adj, равно 0 - начальное значение переменной static. Я не уверен, почему он сбрасывается к своему первоначальному значению вместо нового сохраненного значения.

Перед первым звонком:

self::$_pwdAdjId == 0

Первый звонок:

self::$_pwdAdjId == 7

$adj == 7

Страница (вызов ajax): Второй вызов:

self::$_pwdAdjId == 0 // supposed to be 7

Я что-то упустил? Влияет ли тот факт, что он вызывается через ajax во второй раз, на его static -ness?

Спасибо.

1 Ответ

9 голосов
/ 18 сентября 2011

Когда пользователь меняет страницу, это совершенно другой HTTP-запрос, и ваша программа снова запускается с нуля. static не делает то, что вы думаете, что делает. Вы можете достичь желаемого результата, используя переменные сеанса .

Так как похоже, что вы используете Yii Framework, вы можете захотеть использовать его собственную оболочку поверх сессий PHP вместо того, чтобы катать свою собственную (кстати, она также имеет оболочки для получения параметров HTTP-запроса ).

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