靜態成員,可以看作是屬於整個類而不是類的某個執行個體,只保留一個變數值,而這個變數值對所有執行個體都有效,也就是說,所有執行個體共用這個變數
$this只表示當前執行個體,self::表示類本身,在類之外的代碼中不能使用self::,且self::不能標識自己在繼承樹階層中的位置。也就是說,在擴充類中使用self::範圍時,self::可以調用基類中聲明的方法,但它調用的總是已經在擴充類中重寫的方法。與$this不同的是,在使用靜態變數時,必須在範圍限定符後面加上$符號。
在擴充類中,在基類方法被重寫的情況下,使用parent範圍調用定義在基類中的方法。靜態成員可以只屬於父類。如果在子類和父類中同事聲明了某個成員,可以使用parent:;在子類中訪問父類中的變數。在某些情況下,父類的靜態成員和子類的靜態成員儲存不同的值。
可以在::操作符左邊寫上類的名稱來靜態訪問某個成員,這樣避免建立類的執行個體。不僅省略執行個體化類的代碼,而且還會更搞笑,因為類的每個執行個體都會調用一小部分的系統資源。
在使用::操作符訪問成員變數的時候,需要注意對$符號的使用。因為PHP當前不支援動態靜態變數使用,也就是說不支援可變的靜態變數。在使用$this->$var時,被訪問的成員是包含在$var中的變數的值,而不用$符號訪問某個變數實際上尋找類的某個常量,而常量是不能通過$this來訪問的。
PHP6提出的static::範圍使我們不再需要使用self::和parent::。當希望指向最終的實現功能的類時,可以使用static::,這個限定符會在代碼執行之前計算出繼承階層上最後那個類的成員,這一過程被稱為延遲綁定,它使我們可以在子類中重寫某個靜態變數,並且也可以從某個在父類中聲明的函數中範文這個最終還曾元。
靜態方法與非靜態方法間的一個重要區別:在調用靜態方法時,不再需要擁有類的執行個體。
靜態方法與非靜態方法的使用原則:如果某個方法中不包含$this變數,就應該使用靜態方法;如果不需要類的執行個體,可能還應該使用靜態類來避免去執行個體化類的工作,靜態方法中不能使用$this變數,因為靜態方法不屬於某個特定的執行個體。
instanceof可以確定一個對象時類的執行個體、類的子類、還是實現了某個介面,並進行相應的操作
類輔助函數
boolean class_exists(string class_name)string get_class(object object) //確定對象的上下文array get_class_methods(mixed class_name)array get_class_vars(string class_name) //定義的欄位array get_declared_classes(void) //當前執行指令碼中定義的所有類名array get_object_vars(object object)string get_parent_class(mixed object)boolean interface_exists(string interface_name[, boolean autoload])boolean is_subclass_of(object object, string class_name)boolean method_exists(object object, string method_name)
__autoload函數,當引用未在指令碼中定義的類時會自動調用個函數
newObject = clone oldObject;
__clone()方法用來調整對象的複製行為,在程式碼複製品操作期間執行。
不支援方法重載、操作符重載、多重繼承
以上就介紹了Note:類(Class),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。