php静态变量

php静态变量

Static(静态)关键字

1.在函数中声明的静态变量,只在调用时声明。

2.第二次以后,一看是静态变量,就先到静态区中,看一下有没有这个变量,如果有就使用,而不去再声明。

3.静态变量 ,在同一个函数多次调用中,共享把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。

代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
//--------------如何理解static静态变量-----------

/** 普通局部变量 */
function local() {
$loc = 0; //这样,如果直接不给初值0是错误的。
++$loc;
echo $loc . '<br>';
}
local(); //1
local(); //1
local(); //1
echo '===================================<br/>';

/** static静态局部变量 */
function static_local() {
static $local = 0 ; //此处可以不赋0值
$local++;
echo $local . '<br>';
}
static_local(); //1
static_local(); //2
static_local(); //3
//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。
echo '=======================================<br>';

/** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */
function static_global() {
global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想
//当然的写上"static"加以修饰,那样是错误的.
$glo++;
echo $glo . '<br>';
}
static_global(); //1
static_global(); //2
static_global(); //3
?>
静态局部变量:

1.static类型的内部变量同auto自动变量(即未加static声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,两者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后的值。换言之,static类型的局部变量是一种只能在某个特定函数中使用,但一直占据储存空间的变量。

2.函数体内如果在定义静态变量的同时进行了初始化,则以后程序不在进行初始化操作(出现在函数内部的基本类型的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值3,相当于执行一次赋值语句。

3.静态局部变量的初始化表达式必须是一个常量表达式。即使局部静态变量定义时没有赋初值,

-------------本文结束感谢您的阅读-------------
求打赏,多少都行
0%