浅谈PHP的静态变量
静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
只要在变量前加上关键字static,该变量就成为静态变量了。伯爵娱乐城
01 |
<?php |
02 |
function test() |
03 |
{ |
04 |
static $nm = 1; |
05 |
$nm = $nm * 2; |
06 |
print $nm . "<br />" ; |
07 |
} |
08 |
|
09 |
// 第一次执行,$nm = 2 |
10 |
test(); |
11 |
// 第一次执行,$nm = 4 |
12 |
test(); |
13 |
// 第一次执行,$nm = 8 |
14 |
test(); |
15 |
?> |
程序运行结果:
1 |
2 |
2 |
4 |
3 |
8 |
函数test()执行后,变量$nm的值都保存了下来了。
在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 |
public function nmMethod() |
06 |
{ |
07 |
return self:: $nm ; |
08 |
} |
09 |
} |
10 |
|
11 |
class Article extends NowaMagic |
12 |
{ |
13 |
public function articleMethod() |
14 |
{ |
15 |
return parent:: $nm ; |
16 |
} |
17 |
} |
18 |
|
19 |
// 通过作用于限定操作符访问静态变量 |
20 |
print NowaMagic:: $nm . "<br />" ; |
21 |
|
22 |
// 调用类的方法 |
23 |
$nowamagic = new NowaMagic(); |
24 |
print $nowamagic ->nmMethod() . "<br />" ; |
25 |
|
26 |
print Article:: $nm . "<br />" ; |
27 |
|
28 |
$nmArticle = new Article(); |
29 |
print $nmArticle ->nmMethod() . "<br />" ; |
30 |
?> |
程序运行结果:
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 |
class MyStaticClass |
07 |
{ |
08 |
//public static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error |
09 |
public static $MyStaticVar = null; |
10 |
public static function MyStaticInit() |
11 |
{ |
12 |
//this is the static constructor |
13 |
//because in a function, everything is allowed, including initializing using other functions |
14 |
|
15 |
self:: $MyStaticVar = Demonstration(); |
16 |
} |
17 |
} MyStaticClass::MyStaticInit(); //Call the static constructor |
18 |
echo MyStaticClass:: $MyStaticVar ; |
19 |
//This is the result of demonstration() |
20 |
?> |
程序运行结果:
1 |
This is the result of demonstration() |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。