PHP的class與其他語言有很多不同點。PHP允許很奇葩的在靜態方法中調用執行個體方法,提供了關鍵字self和static用於訪問類自身的靜態成員。self永遠是指當前的類,而static則可能會變成指向衍生類別,這也是比較奇葩的地方,靜態成員是可以繼承和覆蓋的。
PHP還提供了一些以雙底線開頭的魔術方法(包括構造方法和一些內建的“介面”),下面即是PHP現有的魔法方法:
1、__construct($args) 和 __destruct(void)
即構造方法和析構方法,與其他語言相同,在執行個體化時調用構造方法,在回收對象時調用析構方法。析構方法可用於在執行結束後自動回收資源,像關閉一些以指標引用的資源。
2、mixed __call (string $name , array $arguments) 和 mixed __callStatic (string $name , array $arguments)
如果調用一個對象中不存在的方法或類中不存在靜態方法,就會分別調用上面兩個方法。這兩個方法使得你可以使用一些特別的動態運行機制,讓方法無中生有。個人建議盡量少用,它們會讓代碼難以維護,並且無法被IDE支援。
3、mixed __get (string $name) 和 __set (string $name , mixed $value)
跟__call一樣,它們是在調用不存在的屬性時候被執行,同樣建議少用。
4、bool __isset (string $name) 和 __unset (string $name)
當對對象不存在的屬性調用 isset() 或 empty() 時,__isset() 會被調用。__unset則是在調用unset時被調用。
5、array __sleep (void) 和 __wakeup (void)
這兩個方法會分別在序列化之前和序列化之後調用,可用於整理將序列化的對象的屬性和在序列化之後恢複狀態。
6、string __toString (void)
它告訴PHP在需要將對象轉換為字串時應該如何轉換,像 echo new MyClass();
7、mixed __invoke ()
在把一個物件變數當成函數來調用時會調用這個方法。
8、object __set_state (array $properties)
在對一個對象調用var_export()時它將被調用,並以傳回值代替對象自身,可以讓它來組織匯出變數的資料。
9、__clone()
用這個方法允許我們在複製對象的同時也為屬性進行深拷貝,類似.net中的ICloneable介面。
關於自動載入:
PHP自身沒有自動載入的機制,但是新版本中提供了spl_autoload_register這個函數來註冊一個函數,在使用一個不存在的類時被註冊的函數即被調用,開發人員需要手工在函數中實現載入機制。筆者沒深入瞭解過include的機制,如果還需要檢測一個檔案是否存在,可能會讓運行效率變低。
http://www.bkjia.com/PHPjc/748242.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/748242.htmlTechArticlePHP的class與其他語言有很多不同點。PHP允許很奇葩的在靜態方法中調用執行個體方法,提供了關鍵字self和static用於訪問類自身的靜態成員。sel...