w
http://php.net/manual/en/language.variables.scope.php
http://php.net/manual/zh/language.variables.scope.php
<?php function test() { $a = 0; echo $a; $a++; } test(); test(); test(); test();
<?php function test() { static $a = 0; echo $a; $a++; } test(); test(); test(); test();
//0000
//0123
<?php function test() { static $a = 0; echo $a; $a++; } test(); test(); test(); test(); echo $a;
//0123 Notice: Undefined variable: a
变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
本函数没什么用处,因为每次调用时都会将 ¥a 的值设为 0 并输出 0。将变量加一的 ¥a++ 没有作用,因为一旦退出本函数则变量 ¥a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 ¥a 定义为静态的:
现在,变量 ¥a 仅在第一次调用 test() 函数时被初始化,之后每次调用 test() 函数都会输出 ¥a 的值并加一。
Another important feature of variable scoping is the static variable. A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope. Consider the following example:
This function is quite useless since every time it is called it sets ¥a to 0 and prints 0. The ¥a++ which increments the variable serves no purpose since as soon as the function exits the ¥a variable disappears. To make a useful counting function which will not lose track of the current count, the ¥a variable is declared static:
Now, ¥a is initialized only in first call of function and every time the test() function is called it will print the value of ¥a and increment it.
<?php function test() { static $count = 0; // echo $count; $count++; echo $count; if ($count < 10) { test(); } echo 'w', $count; $count--; } test(); die(); test(); test(); test();