Повторная инициализация статических членов в PHP

У меня есть вопрос в моем сегодняшнем экзамене, в котором я должен определить вывод.

<!--?php
function statfun($x)
{
 static $count=0;
 $count += $x;
 if ($count < 20) {
 echo "$count <br-->";
 statfun(++$x);
 } else {
 echo "last num is $count";
 }
}
statfun(2);
?>

Выходной сигнал

2
5
9
14
last num is 20

Я не знаю, почему это результат. Я знаю, что это связано с статическим членом, но каждый раз, когда он входит в функцию, член $count повторно инициализируется. Я видел документацию в Статическое ключевое слово.

Но ничего не написано о повторной инициализации статической переменной? Можем ли мы повторно инициализировать статическую переменную в PHP? С тем же или любым другим значением?

2 ответа

каждый раз, когда он входит в функцию, счетчик членов $повторно инициализируется

Это неверно. Статические переменные инициализируются только один раз, так как статически объявленные переменные отличаются от "обычных" переменных. Таким образом, вы назначаете начальное значение $count. При множественных вызовах statfun() это статическое значение переменной сохраняется и может быть повторно использовано.

Из руководство, раздел "Использование статических переменных":

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

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


когда вы проходите 2, значение установлено равным 2 с $count+=$x; то вы вызывали statfun(++$x), который равен $x+1, и это 2+1=3 поэтому теперь $count будет $count+3, и это будет 5, а затем вы вызове statfun со значением 3, тогда $count будет $count + (3 + 1) = 9 и т.д. и т.д.

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

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

licensed under cc by-sa 3.0 with attribution.