2013-05-13 2 views
2

Если я запустил следующий PHP-код, я получаю 123. Я не понимаю логики этого. То, что я думаю, когда я вызываю функцию каждый раз, когда предполагают, чтобы выход 1. Таким образом, выход должен быть как 111.Статическая переменная в PHP

function keep_track() { 
    STATIC $count = 0; 
    $count++; 
    print $count; 
} 

keep_track(); 
keep_track(); 
keep_track(); 

// output 123 

Я знаю, что статическая переменная имеет значение даже после того, как функция выходов, но в приведенном выше function Я назначаю значение в самой первой строке, но он все еще добавляет +1 с предыдущим значением $count.

Не могли бы вы объяснить это? (Прошу прощения, если мне кажется глупо .. но я пытаюсь выяснить, как именно это происходит)

+3

Вы назначаете только начальное ** значение **. –

+2

[Руководство PHP по статическим переменным] (http://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static) объясняет это хорошо –

+0

Потому что '$ count' внутри функции увеличивается – samayo

ответ

4

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

В этом link прокрутите вниз до Using static variables для лучшего понимания.

+0

Это потому, У меня есть 'Static' перед' $ count'? –

+1

Да. «STATIC» - это ключевое слово, которое используется для обозначения переменных как статических, и это может быть связано с этим ключевым словом. – karthikr

+0

Спасибо за ваш ответ :) Итак, функция просто игнорирует мой 'STATIC $ count = 0;', когда я вызываю его во второй раз и перехожу непосредственно к '$ count ++; ', и все это происходит из-за' static' Я прав ? –

3

Код static $count = 0; выполняется один раз после компиляции, поэтому при каждом вызове вашей функции значение не перезаписывается , См. Примечание «Статические объявления разрешаются во время компиляции». at http://www.php.net/manual/en/language.variables.scope.php

+0

Это все равно выводит '123'. Ответчик ожидал '111' и попросил объяснения. – binarious

+0

@Omar Я на самом деле не ищу код для получения 111 :) Я пытаюсь выяснить, почему/как мой код генерирует 123 :) Спасибо за ваш ответ –

+0

Обновлен мой ответ, чтобы включить объяснение для него –

Смежные вопросы