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 |
?> |
程式執行結果:
相關文章
- 靜態變數變數
- 簡單介紹靜態路由路由
- 靜態IP的優缺點介紹
- Python 動態變數名與呼叫介紹Python變數
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- Java靜態變數在靜態方法內部無法改變值Java變數
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數
- 靜態路由介紹(雲端計算隨筆)路由
- Spring如何為靜態變數注入值Spring變數
- php介紹PHP
- 深入iOS系統底層之靜態庫介紹iOS
- 「譯」靜態單賦值小冊 - 1. 介紹賦值
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- JavaScript中的預解析(變數提升)介紹!JavaScript變數
- JavaScript中的預解析(變數提升)介紹JavaScript變數
- 簡單介紹nginx 變數使用Nginx變數
- C語言--靜態區域性變數C語言變數
- Java逆向基礎之靜態變數存取Java變數
- Java自學入門之靜態變數Java變數
- 【Lua篇】靜態程式碼掃描分析(一)初步介紹
- C++中的基本變數型別介紹C++變數型別
- 簡單介紹SQLserver中的declare變數用法SQLServer變數
- shell程式設計–bash變數介紹程式設計變數
- Java初始化靜態變數的時間順序Java變數
- C++類的靜態成員變數初始化C++變數
- 區域性靜態變數的初始化觀測變數
- php中的動態變數的一個應用PHP變數
- 關於單例及靜態變數測試單例變數
- 複製狀態與變數記錄表 | performance_schema全方位介紹變數ORM
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- Dll堆疊問題(Dll的靜態變數與全域性變數、vs的MT與MD)變數
- PHP重定向與偽靜態PHP
- php 後期靜態繫結PHP
- 路由器基礎介紹,及配置靜態路由,預設路由路由器
- 簡單介紹Lua中的變數與賦值方法變數賦值
- Java 反射修改類的常量值、靜態變數值、屬性值Java反射變數
- 對 PHP 後期靜態繫結的理解PHP