Статические переменные PHP

Это требует, чтобы флэш-память и забастовка> не была свободна (хотя недорогой): amcharts.

я использовал его успешно и как он. Я оценил много опций некоторое время назад и выбрал его. В то время, однако, Google Charts не был так зрел, как это, кажется, теперь. Я рассмотрел бы это сначала, если бы я должен был переоценить теперь.

41
задан Alix Axel 21 January 2010 в 15:09
поделиться

5 ответов

Переменная $ count в функции никаким образом не связана с глобальной переменной $ count . Ключевое слово static такое же, как в C или Java, оно означает: инициализировать эту переменную только один раз и сохранять ее состояние после завершения функции. Это означает, что когда выполнение повторно входит в функцию, оно видит, что внутренний $ count уже был инициализирован и сохранен в последний раз как 1 , и использует это значение.

72
ответ дан 27 November 2019 в 00:10
поделиться
$count = 5; // "outer" count = 5

function get_count()
{
    static $count = 0; // "inner" count = 0 only the first run
    return $count++; // "inner" count + 1
}

echo $count; // "outer" count is still 5 
++$count; // "outer" count is now 6 (but you never echoed it)

echo get_count(); // "inner" count is now + 1 = 1 (0 before the echo)
echo get_count(); // "inner" count is now + 1 = 2 (1 before the echo)
echo get_count(); // "inner" count is now + 1 = 3 (2 before the echo)

Надеюсь, это проясняет вам разум.

41
ответ дан 27 November 2019 в 00:10
поделиться

Первое эхо: дает вам переменную $ count, которую вы объявляете в своей первой строке.

Второе эхо: вызывает get_count, который создает статическую переменную $ count (так что она находится в контексте этой функции ), и когда вы создаете экземпляр статической переменной, вы устанавливаете ее равной нулю. return $ count ++ - одна из тех строк, которых мы обычно избегаем в коде, но, по сути, она увеличивается ПОСЛЕ возврата значения.

Третье эхо: аналогично, 0 был увеличен до 1 после предыдущего вызова get_count, то же самое происходит и здесь - он возвращает 1 и увеличивает значение до 2.

Это помогает или это еще больше сбивает с толку?

5
ответ дан 27 November 2019 в 00:10
поделиться

Прежде всего, $ count внутри функции и $ count вне функции - это две разные переменные. Это объясняет, почему при первом выводе печатается 5.

Теперь о статике: статика означает, что ваша локальная переменная создается только один раз, когда функция выполняется в первый раз. Каждое последующее выполнение функции использует одну и ту же переменную, поэтому последние значения переменной при последнем выполнении функции все еще там.

Итак, когда вы впервые вызываете get_count (), переменная устанавливается в 0, а затем возвращается. После возврата значение переменной увеличивается.

Когда вы вызываете функцию во второй раз, значение переменной все еще равно 1. Это значение возвращается, а затем увеличивается до 2.

0
ответ дан 27 November 2019 в 00:10
поделиться

У вас есть две отдельные переменные, обе называются $ count, но у них разная область видимости . Первая переменная не объявляется явно, но появляется при первом ее назначении.

Вторая переменная (внутри метода) видна только этому методу. Поскольку он static , его значение сохраняется между несколькими выполнениями одного и того же метода. Присваивание $ count = 0; выполняется только при первом запуске метода.

Что касается оператора приращения (++), результатом оценки является значение перед он был увеличен, потому что оператор ( унарный ) стоит после имени переменной. Так что да, результат будет 5, 0, 1.
Если бы вы написали return ++ $ count; , результатом было бы 5, 1, 2.

Примечание: ++ $ count у вас есть в существующем кода, он фактически эквивалентен $ count ++ , поскольку результат оценки отбрасывается. Эффект для переменной $ count такой же: она увеличивается на 1.

13
ответ дан 27 November 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: