程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP學習筆記(3)

PHP學習筆記(3)

編輯:關於PHP編程

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的機制,如果還需要檢測一個文件是否存在,可能會讓運行效率變低。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved