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 |
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 |
print $nowamagic ->nmMethod()
. "<br
/>" ; |
26 |
|
27 |
print
Article:: $nm . "<br
/>" ; |
28 |
|
29 |
$nmArticle = new Article(); |
30 |
print $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
static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error |
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 |
?> |
程式執行結果:
相關文章
- PHP類的靜態(static)方法和靜態(static)變數PHP變數
- 靜態變數和非靜態變數變數
- 靜態變數變數
- 靜態變數與靜態方法變數
- Oracle 靜態引數與動態引數型別介紹Oracle型別
- static靜態變數的理解變數
- js中的靜態變數JS變數
- 靜態IP的優缺點介紹
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- 靜態持續變數變數
- 靜態變數和Session變數Session
- 函式的靜態變數 static函式變數
- 全域性變數和靜態變數的區別變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- Python 動態變數名與呼叫介紹Python變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- 靜態全域性變數和全域性變數變數
- 靜態變數和例項變數區別?變數
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- 遞迴程式中的靜態變數遞迴變數
- Java靜態變數在靜態方法內部無法改變值Java變數
- Java靜態變數塊使用案例Java變數
- C/C++ 靜態變數解析C++變數
- VBA靜態變數與常量(轉)變數
- 靜態路由介紹(雲端計算隨筆)路由
- PHP學習:PHP超全域性變數(Superglobal)$GLOBALS的介紹以及和global的區別PHP變數
- C#靜態建構函式及靜態變數學習C#函式變數
- javascript 變數簡單介紹JavaScript變數
- Java自學入門之靜態變數Java變數
- asp.net中使用靜態變數ASP.NET變數
- 關於例項變數和靜態變數的一點疑問變數
- javascript的靜態方法和例項方法簡單介紹JavaScript
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- C++中的靜態聯編和動態聯編介紹(轉)C++
- 簡單介紹nginx 變數使用Nginx變數
- javascript變數宣告簡單介紹JavaScript變數
- javascript變數汙染簡單介紹JavaScript變數