首先明確一下static在語法上的定義:
php中的類中,靜態變數前要加static關鍵字修飾,而例項變數前則不加。
靜態變數是什麼:
靜態變數可以直接用類名加::呼叫,而不需要去例項化類,靜態變數的生命週期取決於類的生命週期,靜態變數一旦被呼叫,就會始終存在記憶體中,直到程式結束之後,靜態變數才會被登出。靜態變數亦有作用域,在作用域之外不能使用。
我們看一段**
class test
static public function getvar2()
}$t = new test();
echo $t->getvar1();
echo "
";echo test::$var2;
echo "
";test::getvar2();
echo test::$var2;
上面的例子輸出結果為:
instance var
static var
new static var
在上面的例子中,我們定義了乙個test類,然後定義了兩個變數,例項變數$var1和靜態變數$var2,兩個類方法,例項方法getvar1()和靜態方法getvar2()。
我們可以看到,例項變數需要首先將該類例項化,才能用類例項去訪問該變數,包括賦值以及做邏輯運算,而靜態變數則不需要類例項,可以直接用類名加::訪問。
什麼時候用靜態變數:
如果乙個變數是宣告在類中,變數在整個程式的執行過程中都可能需要呼叫,變數的值是很大的字串或者陣列或者其他內容,中間幾乎不會改變該變數的值
PHP的延遲靜態繫結 static
在舊版php中返回本類的乙個例項使用的return new self 但是這個方法有很大的弊端,就是self指的是解析上下文而不是呼叫的上下文。abstract class father class son1 extends father son1 create 也就是說上述 中子類呼叫create...
PHP的static靜態變數
靜態變數只存在於函式作用域內,也就是說,靜態變數只存活在棧中。一般的函式內變數在函式結束後會釋放,比如區域性變數,但是靜態變數卻不會。就是說,下次再呼叫這個函式的時候,該變數的值會保留下來。只要在變數前加上關鍵字static,該變數就成為靜態變數了。01 02functiontest 03 08 0...
PHP靜態延遲繫結 static
php 5.3 1,this永遠代表所在類的物件?不是 2,self用於代表所在類麼?是,永遠代表所在類的物件!看邏輯 class p got eof at end of input echo self where class c extends p echo p saywhere aaa echo...