Статическая переменная PHP внутри функции не увеличивается

Я пытаюсь узнать о статических переменных внутри функции. Итак, я создал это:

    <?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 () Я получил результат, который хотел.

0

Решение

Вы должны двигаться $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++;
}
0

Другие решения

Когда вы вызываете функцию 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++;
}
0

По вопросам рекламы [email protected]