一、靜態屬性、靜態方法編程
在面向對象編程中,咱們不只能夠經過對象訪問方法和屬性,還能夠經過類來訪問它們。這樣的方法和屬性就是「靜態的」(static),必須用static關鍵字來聲明。函數
class staticExample { this
staticpublic $num = 0; 對象
staticpublic function sayNum() { 作用域
echoself::num; io
} 面向對象編程
} function
靜態方法是以類做爲做用域的函數。靜態方法不能訪問這個類中的普通屬性,由於那些屬性屬於一個對象,但能夠訪問靜態屬性。若是修改了一個靜態屬性,那麼這個類的全部實例都能訪問到這個新值。class
由於經過類現而不是實例來訪問靜態元素,因此訪問靜態元素時不須要引用對象的變量,而是使用 :: (兩個冒號)來鏈接類名和屬性或類名和方法。變量
echostaticExample::$num;
staticExample::sayNum();
要從當前類(不是子類)中訪問靜態方法或屬性,可使用self關鍵字。self指向當前類,就像僞變量$this指向當前對象同樣。所以,在staticExample類的外部可使用類名來訪問屬性$num:
staticExample::$num
而在staticExample類內部,可使用self關鍵字
使用緣由:
一、它們在代碼中的任何地方均可用(假設你能夠訪問該類),也就是說,你不須要在對象間傳遞類的實例,也不須要將實例存放在全局變量中,就能夠訪問類中的方法
二、類的每一個實例均可以訪問類中定義的靜態屬性,因此能夠利用靜態屬性來設置值,該值能夠被類的全部對象使用
三、不須要實例化對象,就能訪問靜態屬性或方法,這樣咱們就不用爲了獲取一個簡單的功能而實例化對象
二、常量屬性
有些屬性是不能改變的
在PHP 5能夠在類中定義常量屬性,和全局變量同樣,類常量一旦設置後就不能改變。常量屬性用const關鍵字來聲明。常量不像常規屬性那樣以 $ 開頭。按照慣例,只能用大寫字母來命名常量,以下所示:
class shopProduct {
constAVAILABLE = 0;
//…
}
常量屬性只包含基本數據類型的值。不能將一個對象指派給常量。像靜態屬性同樣,只能經過類而不能經過類的實例訪問常量屬性。引用常量時不須要用 $ 做爲前導符,以下所示:
給已經聲明過的常量賦值會引發解析錯誤。
當須要在類的全部實例中都能訪問某個屬性,而且屬性值無需改變時,應該使用常量。