首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中重新初始化静态成员

在PHP中重新初始化静态成员
EN

Stack Overflow用户
提问于 2011-11-18 00:14:55
回答 2查看 188关注 0票数 3

我在今天的考试中有一道题,我必须确定输出。

代码语言:javascript
运行
复制
<?php
function statfun($x)
{
    static $count=0;

    $count += $x;

    if ($count < 20) {
        echo "$count <br>";
        statfun(++$x);
    } else {
        echo "last num is $count";
    }
}

statfun(2);
?>

输出为

代码语言:javascript
运行
复制
2
5
9
14
last num is 20

我不知道为什么这是输出。我知道这是由于静态成员造成的,但是每次它进入函数时,成员$count都会被重新初始化。我在Static Keyword上看过文档。

但是没有写关于静态变量重新初始化的内容吗?我们可以在PHP中重新初始化静态变量吗?具有相同或任何其他值的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-18 00:18:18

每次进入函数时,成员$count都会重新初始化

这是不正确的。静态变量只初始化一次,这就是静态声明变量与“普通”变量的不同之处。所以基本上,你是在给$count赋一个初始值。在对statfun()的多次调用中,此静态变量的值被保留并可以重用。

来自the manual的“使用静态变量”一节:

静态变量仅存在于局部函数作用域中,但当程序执行离开此作用域时,它不会丢失其值。

另请看手册中的示例代码。这里所说的区别应该能回答你的问题。

票数 5
EN

Stack Overflow用户

发布于 2011-11-18 00:21:14

当您使用$count+=$x;传递2时,count被设置为2,然后您调用了statfun(++$x),它是$x+1,也就是2+1=3,所以现在$count将是$count+3,也就是5,然后您使用值3调用statfun,然后$count将$count+(3+1) = 9,依此类推

静态变量将保存其状态。所以如果你这样称呼它

所以基本上静态变量将保留它的值,并且不会被重新初始化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8170492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档