PHP中的靜態屬性、靜態方法、常量屬性

1、靜態屬性、靜態方法

在面向對象編程中,我們不僅可以通過對象訪問方法和屬性,還可以通過類來訪問它們。這樣的方法和屬性就是“靜態的”(static),必須用static關鍵字來聲明。

class staticExample {
       staticpublic $num = 0;
       staticpublic function sayNum() {
              echoself::num;
        }
}

靜態方法是以類作爲作用域的函數。靜態方法不能訪問這個類中的普通屬性,因爲那些屬性屬於一個對象,但可以訪問靜態屬性。如果修改了一個靜態屬性,那麼這個類的所有實例都能訪問到這個新值。

       因爲通過類現而不是實例來訪問靜態元素,所以訪問靜態元素時不需要引用對象的變量,而是使用 :: (兩個冒號)來連接類名和屬性或類名和方法。

echostaticExample::$num;
staticExample::sayNum();

要從當前類(不是子類)中訪問靜態方法或屬性,可以使用self關鍵字。self指向當前類,就像僞變量$this指向當前對象一樣。因此,在staticExample類的外部可以使用類名來訪問屬性$num:

staticExample::$num

而在staticExample類內部,可以使用self關鍵字

       使用原因:

       1、它們在代碼中的任何地方都可用(假設你可以訪問該類),也就是說,你不需要在對象間傳遞類的實例,也不需要將實例存放在全局變量中,就可以訪問類中的方法

       2、類的每個實例都可以訪問類中定義的靜態屬性,所以可以利用靜態屬性來設置值,該值可以被類的所有對象使用

       3、不需要實例化對象,就能訪問靜態屬性或方法,這樣我們就不用爲了獲取一個簡單的功能而實例化對象

 

2、常量屬性

       有些屬性是不能改變的

       在PHP 5可以在類中定義常量屬性,和全局變量一樣,類常量一旦設置後就不能改變。常量屬性用const關鍵字來聲明。常量不像常規屬性那樣以 $ 開頭。按照慣例,只能用大寫字母來命名常量,如下所示:

class shopProduct {
       constAVAILABLE = 0;
       //…
}

       常量屬性只包含基本數據類型的值。不能將一個對象指派給常量。像靜態屬性一樣,只能通過類而不能通過類的實例訪問常量屬性。引用常量時不需要用 $ 作爲前導符,如下所示:

echoshopProduct::AVAILABLE;

       給已經聲明過的常量賦值會引起解析錯誤。

       當需要在類的所有實例中都能訪問某個屬性,並且屬性值無需改變時,應該使用常量。

轉自:[深入PHP面向對象、模式與實踐(第2版)].(美)贊德斯徹.中文版

發佈了47 篇原創文章 · 獲贊 25 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章