2013-05-13 106 views
2

如果我运行下面的PHP代码,我得到123.我不明白它背后的逻辑。我认为,当我每一次它想输出1.调用函数所以输出应该像111PHP中的静态变量

function keep_track() { 
    STATIC $count = 0; 
    $count++; 
    print $count; 
} 

keep_track(); 
keep_track(); 
keep_track(); 

// output 123 

我知道,一个静态变量,甚至在函数退出后,但在上面存放值函数我在第一行中分配一个值,但它仍然将+1加上前一个值$count

你能解释一下吗? (我很抱歉,如果我听起来像一个愚蠢的..但我试图找出如何确切发生这种情况)

+3

您只分配**初始**值。 – 2013-05-13 20:11:52

+2

[PHP静态变量手册](http://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static)解释了这个问题 – 2013-05-13 20:12:24

+0

因为'$ count'函数内部递增 – samayo 2013-05-13 20:12:26

回答

4

$count仅在函数的第一次调用时被初始化,并且每次调用该方法时,都会增加$count

在此link中,向下滚动到Using static variables以便更好地理解。

+0

是因为'count'前面有'Static'吗? – 2013-05-13 20:16:18

+1

是的。 'STATIC'是一个关键字,用于将变量标记为静态,并且这种行为是由于该关键字引起的。 – karthikr 2013-05-13 20:17:10

+0

感谢您的回答:)所以这个函数只是忽略了我的'STATIC $ count = 0;'当我第二次调用它并直接进入'$ count ++;'这一切都是由于'static'我对吗 ? – 2013-05-13 20:22:25

3

代码static $count = 0;编译时执行一次,这就是为什么每次调用你的函数的值不会被覆盖。请参阅注释“静态声明在编译时解析”。 at http://www.php.net/manual/en/language.variables.scope.php

+0

This'd仍然输出'123'。提问者预计'111'并要求解释。 – binarious 2013-05-13 20:16:00

+0

@Omar我其实不是在寻找一个代码来获得111 :)我试图找出为什么/我的代码是如何生成的123 :)感谢您的回答 – 2013-05-13 20:18:15

+0

已更新我的回答以包含对它的解释 – 2013-05-13 20:21:58