static、全局、局部

来源:互联网 发布:阿里云域名优惠 2017 编辑:程序博客网 时间:2024/05/22 11:56

1、所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量

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

3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。

4、局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量

5、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的

6、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它

7、把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

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

9、PHP里面只有全局作用域和函数作用域,没有块作用域

10、3个变量是不相互影响

<?phpinclude 'ChromePhp.php';$age=0;$age++;function test1() {static $age = 100;$age++;ChromePhp::log($age);  //output 101}function test2() {static $age = 1000;$age++;ChromePhp::log($age); //output 1001}test1();test2();ChromePhp::log($age); //outpuut 1?>


 

 

 

0 0