PHP中static关键字原理的学习研究分析

$a =
abcababa;$count=strpos($a,ab);$str=substr_replace($a,,$count,2);输出结果:cababa代码虽短,但也算是一个小算法!

看PHP手册的时候发现了下面这样一段代码:
复制代码 代码如下:
function Test()
澳门新葡亰手机版,{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count–;
}
?>

执行结果如下:
这是一个递归的函数,声明的静态变量count记录次数,输出1~10。
我在看的时候有个疑惑,递归调用的时候 static $count = 0;
语句会重复执行,这为什么不会导致count变量被重复赋值呢?带着这个疑问和同事研究了一下,测试用代码如下:
复制代码 代码如下:
echo ‘start
‘;
static $a = 10;
echo “$a
“;
unset($GLOBALS[‘a’]);
echo “$a
“;
static $a = 20;
echo “$a
“;
$GLOBALS[‘a’] = 10;
echo “$a
“;
static $a = 30;
echo “$a
“;
unset($GLOBALS[‘a’]);
echo “$a
“;
static $a;
echo “$a
“;
static $a = 40;
echo “$a
“;
$a = 100;
echo “$a
“;
static $a = 50;
echo “$a
“;
static $a = 4;
echo “$a
“;
echo ‘end
‘;
exit;
?>

执行结果如下:
start

  1. Notice:
    Undefined variable: a 
  2. 10 
  3. 10 
  4. Notice:
    Undefined variable: a 
  5. 10 
  6. 10 
  7. 100 
  8. 100 
  9. 100 
  10. end

(结果中关于文件位置的部分已删去。也可以去掉echo语句使用zend的debug功能查看,这样结果更清晰)