PHP静态变量

omg*_*omg 41 php static

$count = 5;
function get_count()
{
    static $count = 0;
    return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();
Run Code Online (Sandbox Code Playgroud)

我猜测它输出5 0 1并且它是正确的,但我需要更好的解释?

sou*_*rge 72

$count函数中的变量与全局$count变量没有任何关系.static关键字与C或Java中的关键字相同,它表示:仅初始化此变量一次,并在函数结束时保持其状态.这意味着,当执行重新进入函数时,它会看到内部$ count已经被初始化并最后一次存储为1,并使用该值.


Ali*_*xel 41

$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)
Run Code Online (Sandbox Code Playgroud)

我希望这能清除你的想法.


Tho*_*rin 13

您有两个单独的变量,都称为$ count,但它们具有不同的范围.第一个变量未显式声明,但在您第一次分配时就已存在.

第二个变量(在方法内)仅对该方法可见.由于它是静态的,因此在同一方法的多次执行之间保留其值.分配$count = 0;仅在第一次运行方法时执行.

至于增量运算符(++),评估的结果是增加之前的值,因为(一元)运算符在变量名之后.所以是的,输出将是5,0,1.
如果你要写return ++$count;,结果将是5,1,2.

注意:由于评估结果被丢弃++$count,因此您在现有代码中具有实际等效性$count++.对$count变量的影响是相同的:它增加1.

  • 霍瑞,有人终于说'范围':) (13认同)

Fen*_*ton 5

First echo:给你在第一行声明的变量$ count.

第二个echo:calles get_count,它创建静态变量$ count(所以它在这个函数的上下文中),当你实例化静态变量时,你将它设置为零.return $ count ++是我们通常在代码中避免的那些行之一 - 但实质上,它在返回值后递增.

第三个回声:同样,在前一个get_count调用之后,0增加到1,这里发生的情况相同 - 它返回1并将值递增到2.

这有帮助还是实际上更令人困惑?

  • 从技术上讲,`$ count`变量在返回任何内容之前会递增.只是`$ count ++`在递增之前计算$ count的值. (4认同)