PHP static關鍵字的用法及注意點

2021-07-22 08:52:51 字數 1502 閱讀 4429

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 很顯然函式...