你定义了static 就是静态变量
但是静态变量的初始化只进行一次,而且是定义静态变量的时候初始化
static $a = array(1,2,3);
print_r($a);
static $a = array();
这样实际上是定义了两次静态变量,并初始化,实际做会执行其中一个
就是后面这个
上面的代码实际上会被编译器编程这样
function f1(){
static $a = array();
print_r($a);
print_r($a);
}
function f2(){
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
你看下这两段代码:
function f2(){
static $a= array(1,2,3);
print_r($a);
$a[]=1;
$a[]=2;
$a[]=3;
print_r($a);
$a= array();
print_r($a);
}
function f2(){
static $a= array(1,2,3);
print_r($a);
$a[]=1;
$a[]=2;
$a[]=3;
print_r($a);
static $a= array();
print_r($a);
}
添加了static修饰符的变量即使在该函数执行完毕值仍然不会丢失,也就是说,在下一次调用这个函数时,变量仍然记得原来的值。如:
function test()
{
static $var1=1;
$var1+=2;
echo $var1.' ';
}
test();
test();
test();
?>
运行结果如下:
3 5 7
因为静态变量会在整个执行的过程中最先初始化后再执行后面的代码!
其实相当于执行如下代码:
function f1()
{
static $a = array(1,2,3);
static $a = array();
print_r($a);
print_r($a);
}
function f2()
{
static $a = array();
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
一般static用于类中,于普通函数中的变量没有多大的用处。
class Test{
public static $test;
public static function fun() {
xxxx
}
}
你就可以在代码中直接Test::fun();而不用new一个实例··