Это требует, чтобы флэш-память и забастовка> не была свободна (хотя недорогой): amcharts.
я использовал его успешно и как он. Я оценил много опций некоторое время назад и выбрал его. В то время, однако, Google Charts не был так зрел, как это, кажется, теперь. Я рассмотрел бы это сначала, если бы я должен был переоценить теперь.
Переменная $ count
в функции никаким образом не связана с глобальной переменной $ count
. Ключевое слово static
такое же, как в C или Java, оно означает: инициализировать эту переменную только один раз и сохранять ее состояние после завершения функции. Это означает, что когда выполнение повторно входит в функцию, оно видит, что внутренний $ count уже был инициализирован и сохранен в последний раз как 1
, и использует это значение.
$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)
Надеюсь, это проясняет вам разум.
Первое эхо: дает вам переменную $ count, которую вы объявляете в своей первой строке.
Второе эхо: вызывает get_count, который создает статическую переменную $ count (так что она находится в контексте этой функции ), и когда вы создаете экземпляр статической переменной, вы устанавливаете ее равной нулю. return $ count ++ - одна из тех строк, которых мы обычно избегаем в коде, но, по сути, она увеличивается ПОСЛЕ возврата значения.
Третье эхо: аналогично, 0 был увеличен до 1 после предыдущего вызова get_count, то же самое происходит и здесь - он возвращает 1 и увеличивает значение до 2.
Это помогает или это еще больше сбивает с толку?
Прежде всего, $ count внутри функции и $ count вне функции - это две разные переменные. Это объясняет, почему при первом выводе печатается 5.
Теперь о статике: статика означает, что ваша локальная переменная создается только один раз, когда функция выполняется в первый раз. Каждое последующее выполнение функции использует одну и ту же переменную, поэтому последние значения переменной при последнем выполнении функции все еще там.
Итак, когда вы впервые вызываете get_count (), переменная устанавливается в 0, а затем возвращается. После возврата значение переменной увеличивается.
Когда вы вызываете функцию во второй раз, значение переменной все еще равно 1. Это значение возвращается, а затем увеличивается до 2.
У вас есть две отдельные переменные, обе называются $ count, но у них разная область видимости . Первая переменная не объявляется явно, но появляется при первом ее назначении.
Вторая переменная (внутри метода) видна только этому методу. Поскольку он static , его значение сохраняется между несколькими выполнениями одного и того же метода. Присваивание $ count = 0;
выполняется только при первом запуске метода.
Что касается оператора приращения (++), результатом оценки является значение перед он был увеличен, потому что оператор ( унарный ) стоит после имени переменной. Так что да, результат будет 5, 0, 1.
Если бы вы написали return ++ $ count;
, результатом было бы 5, 1, 2.
Примечание: ++ $ count
у вас есть в существующем кода, он фактически эквивалентен $ count ++
, поскольку результат оценки отбрасывается. Эффект для переменной $ count
такой же: она увеличивается на 1.