PHP静态变量在函数内部不递增

时间:2014-09-27 02:22:23

标签: php function variables static

我正在尝试了解函数内部的静态变量。所以我创造了这个:

    <?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() ;我得到了我想要的结果。

2 个答案:

答案 0 :(得分:0)

您应该在while循环中移动$counter_function = counter_inside_function();,以便在每次迭代时调用该函数:

<?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++;
    }

答案 1 :(得分:0)

当您在第13行调用函数counter_inside_function()并将其返回值存储到变量中时,您已经运行了该函数一次并返回1.现在,因为counter_inside_function()中的变量是静态它将在下次调用时保持该值。这就是为什么它似乎从2开始时真的你在while循环之前将它增加到1然后在循环中看起来好像它从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++;
}