静态变量
2016-01-04 11:20
351 查看
静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
只要在变量前加上关键字static,该变量就成为静态变量了。
程序运行结果:
函数test()执行后,变量$nm的值都保存了下来了。
在class中经常使用到静态属性,比如静态成员、静态方法。
静态变量$nm属于类nowamagic,而不属于类的某个实例。这个变量对所有实例都有效。
::是作用域限定操作符,这里用的是self作用域,而不是$this作用域,$this作用域只表示类的当前实例,self::表示的是类本身。
程序运行结果:
程序运行结果:
PHP没有静态构造器,你可能需要初始化静态类,有一个很简单的方法,在类定义后面直接调用类的Demonstration()方法。
程序运行结果:
只要在变量前加上关键字static,该变量就成为静态变量了。
01 | <?php |
02 | function test() |
03 | { |
04 | static $nm = 1; |
05 | $nm = $nm * 2; |
06 | $nm . "<br />" ; |
07 | } |
08 |
09 | // |
10 | test(); |
11 | // |
12 | test(); |
13 | // |
14 | test(); |
15 | ?> |
1 | 2 |
2 | 4 |
3 | 8 |
在class中经常使用到静态属性,比如静态成员、静态方法。
Program List:类的静态成员
静态变量$nm属于类nowamagic,而不属于类的某个实例。这个变量对所有实例都有效。::是作用域限定操作符,这里用的是self作用域,而不是$this作用域,$this作用域只表示类的当前实例,self::表示的是类本身。
01 | <?php |
02 | class nowamagic |
03 | { |
04 | public static $nm = 1; |
05 |
06 | function nmMethod() |
07 | { |
08 | self:: $nm += 2; |
09 | echo self:: $nm . '<br />' ; |
10 | } |
11 | } |
12 |
13 | $nmInstance1 = new nowamagic(); |
14 | $nmInstance1 -> nmMethod(); |
15 |
16 | $nmInstance2 = new nowamagic(); |
17 | $nmInstance2 -> nmMethod(); |
18 | ?> |
1 | 3 |
2 | 5 |
Program List:静态属性
01 | <?php |
02 | class NowaMagic |
03 | { |
04 | public static $nm = 'www.nowamagic.net' ; |
05 |
06 | public function nmMethod() |
07 | { |
08 | return self:: $nm ; |
09 | } |
10 | } |
11 |
12 | class Article extends NowaMagic |
13 | { |
14 | public function articleMethod() |
15 | { |
16 | return parent:: $nm ; |
17 | } |
18 | } |
19 |
20 | // 通过作用于限定操作符访问静态变量 |
21 | print NowaMagic:: $nm . "<br />" ; |
22 |
23 | // 调用类的方法 |
24 | $nowamagic = new NowaMagic(); |
25 | $nowamagic ->nmMethod() "<br />" ; |
26 |
27 | print Article:: $nm . "<br />" ; |
28 |
29 | $nmArticle = new Article(); |
30 | $nmArticle ->nmMethod() "<br />" ; |
31 | ?> |
1 | www.nowamagic.net |
2 | www.nowamagic.net |
3 | www.nowamagic.net |
4 | www.nowamagic.net |
Program List:简单的静态构造器
PHP没有静态构造器,你可能需要初始化静态类,有一个很简单的方法,在类定义后面直接调用类的Demonstration()方法。01 | <?php |
02 | function Demonstration() |
03 | { |
04 | return 'This is the result of demonstration()' ; |
05 | } |
06 |
07 | class MyStaticClass |
08 | { |
09 | //public |
10 | public static $MyStaticVar = null; |
11 |
12 | public static function MyStaticInit() |
13 | { |
14 | //this is the static constructor |
15 | //because in a function, everything is allowed, including initializing using other functions |
16 |
17 | self:: $MyStaticVar = Demonstration(); |
18 | } |
19 | } MyStaticClass::MyStaticInit(); //Call the static constructor |
20 |
21 | echo MyStaticClass:: $MyStaticVar ; |
22 | //This is the result of demonstration() |
23 | ?> |
1 | This is the result of demonstration() |
相关文章推荐
- Android Fragment 动态、静态切换
- Java常用类库--观察者设计模式( Observable类Observer接口)
- 设计模式:8)外观设计模式
- cJSON代码阅读(1)——JSON介绍
- 在本地启动war包连接的是服务器的数据库不抱错,把war包放到服务器报错
- Unity Shader 学习笔记(十) 滚动效果Shader实例
- 关于AD9的一些操作
- Linux系统中出现中文乱码问题
- jQuery on()方法绑定动态元素的点击事件
- 通过网页集中访问Docker容器
- 嵌入式开发中用到的存储RAM FLASH ROM
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- 根据状态栏获取网络状态,区分2G、3G、4G、WIFI
- 设计模式:7)代理设计模式
- HTTPClient 连接管理器
- [ios][swift]使用swift闭包进行viewcontroller反向传值
- LeetCode - Decode Ways
- 制作U盘系统启动盘并使用其重装系统
- 孩子忧伤时我们家长该怎么做?
- String.valueof(null) 与 String.valueof((Object)null)