php static關鍵字用來定義靜態方法及屬性,在類中可用來延遲靜態繫結以及在函式中修飾變數。
1:先來談談static在函式中的用法;
function add()
這裡static的作用即類似於c裡的static的作用,保證$a變數只有在add()第一次呼叫時才會被初始化,但需要注意的是定義static變數的時候,可以不賦初值,可以給定初值,但是賦初值的時候不能使用表示式或者呼叫函式賦值,否則會報錯。
另外一點需要注意的即是static變數不會儲存引用,如下:
function get_obj_ref()
return $obj;
}$obj = get_obj_ref();
$obj2 = get_obj_ref();
function get_obj_noref()
return $obj;
} $obj = get_obj_noref();
$obj2 = get_obj_noref();
當static儲存引用時,二次呼叫函式後,該變數的值並未被儲存下來,且執行上面程式會報deprecated
錯誤,即返回引用值賦值的用法已棄。
2:static在類中的延遲靜態繫結;
延遲靜態繫結是指允許在乙個靜態繼承的上下文中引用被呼叫類。延遲繫結的意思為:static::不再為定義當前方法所在的類,而是實際執行時所在的類。注:它可以用於
(但不限於)
靜態方法的呼叫。
除了簡單的static延遲繫結的用法,還有一種**呼叫,即使用self::,parent::,static:: 以及forward_static_call()(該函式只能在方法中呼叫)將**呼叫資訊,如下:
class a
public static function who()
}class b extends a
public static function who()
}class c extends b
}c::test();
這裡得到的結果是a c c,顯然在呼叫parent::foo()時,還是使用了執行時呼叫類。
還有一點需要注意的是:只有顯示宣告的static類才是從屬與子類的。
class a
echo get_called_class().' '.static::$var2.'
'; }
} class b extends a
class c extends a
b::test();
c::test();
這裡得到的結果是 b b。這裡b類首先呼叫過test()方法,呼叫後$var2變數已經被賦值,而c類未定義自己的$var2變數,且父類中$var2變數值已經存在,故直接使用,若在b c類中顯示定義$var2變數,則結果又會有所不同。
關鍵字的用法 C 中const關鍵字用法總結
ark2000 看完了c primer的基礎篇,對const還是有點陌生,在這裡小小地總結一下吧。在變數的定義前加上const修飾符即可完成const物件的建立。const int val 5 const變數的值不能改變。val 5 error assignment of read only var...
const關鍵字用法
1 const常量 如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤 邊際效應 2 const修飾類的資料成員 class a const...
restrict關鍵字用法
概括的說,關鍵字restrict只用於限定指標 該關鍵字用於告知編譯器,所有修改該指標所指向內容的操作全部都是基於 base on 該指標的,即不存在其它進行修改操作的途徑 這樣的後果是幫助編譯器進行更好的 優化,生成更有效率的彙編 舉個簡單的例子 int foo int x,int y 很顯然函式...