2013-07-05 1 views
6
function track_times() { 
static $i = 0; 
$i++; 
static $i = 5; 
return $i; 
} 

echo track_times() . "\n"; 
echo track_times() . "\n"; 

Результат:Почему второе статическое назначение переменных вступает в силу не первым?

6 
7 

Я знаю, что люди не используют static переменные таким образом, просто не может объяснить результат. Результат подразумевает, что второе назначение вступает в силу, но $i прирастает перед назначением, поэтому почему первый вызов функции возвращает 6?

+0

, но почему вы хотите написать этот шаблон? не звучит логично. – Raptor

ответ

3

Статические объявления разрешаются во время компиляции. Вы увеличиваете его во время выполнения. Поэтому вы увеличиваете его после того, как оно уже объявлено как 5. Смотрите также http://www.php.net/manual/en/language.variables.scope.php

+0

Это имеет смысл, спасибо! – samluthebrave

+0

Если я удалю 'static' в первом присваивании, результат будет« 5, 5 », так как это имеет значение? – samluthebrave

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