參考在線文檔,整理php中類的相關概念以下
$this 在類的內部可使用僞變量$this,這個僞變量爲一個到主叫對象(經我的測試理解這應該是在運行時的真實對象,不是類,運行時綁定)的引用,因此一個類中使用$this,在運行時,這個$this指代的多是該類的對象,也多是該來的子類對象,也多是其餘對象,
參考例子
繼承 php中不支持多繼承,一個類只能繼承一個基類,被繼承的方法和屬性能夠用一樣的名字從新聲明覆蓋,父類中定義的常屬性和常方法不能被覆蓋,能夠經過parent來訪問被覆蓋的屬性或方法
屬性 類的屬性初始化的值必須是常數(php腳本在編譯階段就能夠獲得的值,不依賴運行時的環境。好比字符串,整數,數組),屬性有靜態屬性和非靜態屬性,非靜態屬性可使用->訪問,也可使用::訪問,靜態屬性只能經過::訪問
類常量 定義和使用類常量的時候不須要使用$,類常量不能用訪問控制符修飾,類常量的值必須是一個定值,不能是變量,類屬性,數學運算的結果或函數調用。使用::訪問類常量,不須要實例化對象也能夠訪問類常量,類常量也算一個特殊的靜態屬性
構造函數與析構函數 php中的這兩個函數,一個是在對象被建立的時候被執行,一個是在某個對象的全部引用都被刪除或對象被顯式銷燬時執行。要注意的就是在繼承中,子類的構造函數在參數上能夠和父類不一樣;其次就是若是子類沒有定義構造函數或析構函數,會繼承父類的;子類若是定義了,父類的構造函數就不會被隱式調用,除非在子類的構造函數中顯示調用父類構造函數
訪問控制(可見性) 類的屬性和方法的訪問控制有3種,public,protected,private。被定義爲public的能夠在任何地方被訪問,被定義成protected的只能被其自身或子類或父類訪問,被定義爲private的只能被其自身訪問
範圍解析操做符(::) self,parent,static這三個特殊關鍵詞能夠用在類的內部對其屬性或方法進行訪問
static 聲明類的屬性或方法爲靜態,就能夠不實例化類直接訪問,靜態屬性不能經過實例化的對象訪問,靜態方法能夠經過實例化的對象訪問
對象接口 接口中定義的全部方法必須是共有的,這是接口特性
trait 解決php中單繼承的一種代碼複用機制,組合功能
對象遍歷 默認狀況下,用foreach對類對象進行遍歷,類的public屬性都會被遍歷到。進一步,可讓類實現Iterator接口(實現rewind,current,key,next,valid方法)讓類決定如何遍歷。也能夠實現IteratorAggregate接口(實現getIterator方法,這個方法返回一個實現了Iterator或Traversable接口的類)來自定義遍歷
final(常類,常方法) php5後新增的,類中方法被聲明爲final,子類沒法覆蓋,類被聲明爲final,不能被繼承
clone php中,對象變量存儲的是對象的標識,對象變量賦值給其餘變量,只是將標識複製給了其餘變量,對象不會新增。修改一個對象變量的屬性會影響到其餘指向相同對象的變量,若是採用clone,會新增一個新的對象,新對象內部的屬性若是是仍舊是對象,須要實現模式方法__clone(),進行內部屬性克隆
對象比較 比較原則,使用==,兩個對象是同一個類實例,屬性和屬性值都相等,相等。使用===,兩個對象變量指向某個類的同一個實例,相等
類型約束 php5以後,能夠在函數的參數上使用類型約束,類型約束不能用於標量類型,好比int,string,trait也不行
後期靜態綁定 self或者__CLASS__是對當前類的靜態引用,取決於定義當前方法所在的類。static再也不被解析爲定義當前方法所在的類,而是實際運行時計算的
對象和引用 php5以後,一個對象變量再也不保存這個對象的值,只是保留一個對象的標識,用於訪問真正的對象內容。當對象做爲參數,函數返回,賦值(不是clone)給其餘變量,另一個變量一樣也是保存同一個標識的拷貝,這個標識能夠指到正真內容
對象序列化 序列化方法serialize(),鉤子__sleep()。反序列化方法unserialize(),鉤子__wakeup()