Я пытаюсь узнать о статических переменных внутри функции. Итак, я создал это:
<?php
// Create a function that has a counter
function counter_inside_function()
{
static $counter = 0;
++$counter;
return $counter;
}
// counter_inside_function() in a variable
$counter_function = counter_inside_function();
// Create a loop and place the function inside it
$count = 1;
while ($count < 11) {
echo $counter_function, '<br>';
// echo counter_inside_function(), '<br>';
$count++;
}
Я ожидал увеличить счетчик, но это не так. Тем не менее, если я раскомментирую строку 21 и выведу функцию напрямую (не переменная $ counter_function, вот когда она увеличивается. Чего я не получаю, так это того, что она начинает считать с 2 вместо 1. Но когда я удалила $ counter_function = counter_inside_function () Я получил результат, который хотел.
Вы должны двигаться $counter_function = counter_inside_function();
внутри цикла while, чтобы функция вызывалась на каждой итерации:
<?php
// Create a function that has a counter
function counter_inside_function()
{
static $counter = 0;
++$counter;
return $counter;
}
// Create a loop and place the function inside it
$count = 1;
while ($count < 11) {
$counter_function = counter_inside_function();
echo $counter_function, '<br>';
$count++;
}
Когда вы вызываете функцию counter_inside_function () в строке 13 и сохраняете ее возвращаемое значение в переменной, вы выполняете один раз, когда вы запускаете эту функцию и она возвращает 1. Теперь, так как переменная в counter_inside_function () является статической, она идет сохранить это значение при следующем вызове. Вот почему кажется, что он начинается с 2, когда вы действительно увеличиваете его до 1 до цикла while, а затем во время цикла кажется, что он начинается с 2.
Теперь проблема с циклом состоит в том, что повторение переменной $ counter_function 20 раз не означает, что вы вызываете функцию counter_inside_function () 20 раз. Все, что вы делаете, это берете номер, который был сохранен в нем, при первом вызове (который равен 1) и выводите его 20 раз. Поэтому, если вы удалите комментарий в строке 21 и удалите вызов функции в строке 13 (чтобы он не увеличивался до 1 до начала цикла), ваша программа выдаст вам нужные результаты.
Вот как должен выглядеть ваш код:
// Create a function that has a counter
function counter_inside_function()
{
static $counter = 0;
++$counter;
return $counter;
}
// Create a loop and place the function inside it
$count = 1;
while ($count < 11) {
$counter_function = counter_inside_function();
echo $counter_function, '<br>';
$count++;
}