靜態成員,可以看作是屬於整個類別而不是類別的某個實例,只保留一個變數值,而這個變數值對所有實例都有效,也就是說,所有實例共享這個變數
$this只表示當前實例,self::表示類別本身,在類別之外的程式碼中不能使用self::,且self::不能標識自己在繼承樹層次結構中的位置。也就是說,在擴充類別中使用self::作用域時,self::可以呼叫基底類別中宣告的方法,但它所呼叫的總是已經在擴展類別中重寫的方法。與$this不同的是,在使用靜態變數時,必須在作用域限定詞後面加上$符號。
在擴展類別中,在基類方法被重寫的情況下,使用parent作用域呼叫定義在基類中的方法。靜態成員可以只屬於父類別。如果在子類別和父類別中同事宣告了某個成員,可以使用parent:;在子類別中存取父類別中的變數。在某些情況下,父類別的靜態成員和子類別的靜態成員會保存不同的值。
可以在::操作符左邊寫上類別的名稱來靜態的存取某個成員,這樣避免創建類別的實例。不僅省略實例化類別的程式碼,而且還會更搞笑,因為類別的每個實例都會呼叫一小部分的系統資源。
使用::操作符存取成員變數的時候,需要注意對$符號的使用。因為PHP目前不支援動態的靜態變數使用,也就是說不支援可變的靜態變數。使用$this->$var時,被存取的成員是包含在$var中的變數的值,而不用$符號存取某個變數實際上尋找類別的某個常數,而常數是不能透過$this來訪問的。
PHP6提出的static::作用域使我們不再需要使用self::和parent::。當希望指向最終的實作功能的類別時,可以使用static::,這個限定符會在程式碼執行之前計算出繼承層次結構上最後那個類別的成員,這個過程稱為延遲綁定,它使我們可以在子類別中重寫某個靜態變量,也可以從某個在父類別中宣告的函數中範文這個最終還曾元。
靜態方法與非靜態方法間的一個重要區別:在呼叫靜態方法時,不再需要擁有類別的實例。
靜態方法與非靜態方法的使用原則:如果某個方法中不包含$this變量,就應該使用靜態方法;如果不需要類別的實例,可能還應該使用靜態類別來避免去實例化類別的工作,靜態方法中不能使用$this變量,因為靜態方法不屬於某個特定的實例。
instanceof可以確定一個物件時類別的實例、類別的子類別、還是實現了某個接口,並進行對應的操作
__autoload函數,當引用未在腳本中定義的類別時會自動呼叫個函數
);物件的克隆行為,在程式碼克隆操作期間執行。
不支援方法重載、操作符重載、多重繼承
以上就介紹了Note:類別(Class),包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。