在函式執行完後,變數值仍然儲存,並沒有變回初始設定的值0。
<?php
function
test()
test()
;test()
;test()
;?>
結果:
1
23
可以發現a設定靜態變數之後,每次$a的值都儲存下來了。我剛開始還以為這個變數變成了全域性變數,測試發現這個變數$a依然只能在函式裡呼叫,在函式外是不能呼叫的。
我們再來看看函式裡變數不設定static:
<?php
function
test()
test()
;test()
;test()
;?>
結果:
1
11
作用:1,類的屬性或方法可以通過類名訪問 2,呼叫類之後,變數值不變。
一,通過類名訪問例子:
<?php
class
test
}echo test::$a
;?>
輸出:
0
不指定static是無法通過類名呼叫的:
二,儲存值
類裡的static變數值儲存:
<?php
class
test}$a
=new
test()
;echo test::$a
."\n";$a
=new
test()
;echo test::$a
."\n";$a
=new
test()
;echo test::$a
."\n"
;?>
輸出
1
23
每次new乙個test類,都會觸發__construct()魔術方法讓$a的值加一,變數$a值的變化都儲存下來了。
類裡的方法裡的static變數值會儲存:
<?php
class
test
}echo test:
:add()
;echo test:
:add()
;echo test:
:add()
;echo test:
:add()
;?>
結果:
123
4
總結:作用就是讓static修飾變數在所在域的值儲存下來。
php裡面只有全域性作用域和函式作用域,而static修飾全域性變數域裡的變數沒有意義,因為在全域性變數域裡面變數值本來就會儲存,不會像函式一樣,每次呼叫值都會變回初始值。如下:
學習自:php之static靜態變數詳解
php 靜態變數static
靜態變數只存在於函式作用域內,也就是說,靜態變數只存活在棧中。一般的函式內變數在函式結束後會釋放,比如區域性變數,但是靜態變數卻不會。就是說,下次再呼叫這個函式的時候,該變數的值會保留下來。只要在變數前加上關鍵字static,該變數就成為靜態變數了。functiontest 第一次執行,nm tes...
靜態變數和非靜態變數
class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...
PHP的靜態變數管理
php的靜態變數需要集中管理,比如一些系統標識或者型別標識。我的乙個想法是用型別類來管理。乙個型別基類 author jixiaolong todo 型別基類 class typebase function destruct modify by jixiaolong 2013 4 5 public ...