屬性跟方法的重載
__get() __set()
當 $name 未定義 或者修飾符爲 private 或者protected 時候。給對象$name屬性賦值,因爲$name不存在,所以會調用__set()方法。獲取 對象的 $name 時候,因爲屬性不存在,所以會調用 __get()方法。
下面是一個更加能說明使用的例子。 array_key_exists() 方法:檢查某個數組中是否存在某個鍵
__call($function_name,$args) 方法會在對象調用某不存在的方法的時候被調用
第一個參數會返回 當前 不存在的方法的名字,第二個參數會接收當前不存在的函數的參數。
使用數組訪問的重載
數組的方式訪問對象中的屬性。實現arrayAccess方法,並重寫四個方法。
迭代器
普通的類的屬性是可以直接foreach被遍歷的。
但是對於複雜的數據,比如班級類中存在學生對象的數組。用forearch無法獲取到學生的屬性。這就用到了迭代器。
班級類中實現iterator接口,通過指針操作了 $stu_list數組。所以foreach遍歷班級的時候會自動去遍歷 $stu_list數組。只需要實現接口添加相應操作,而不需要去知道php內部的具體實現方法。
遍歷班級,獲取相應stu,通過stu就可以獲取相應的值。這裏__toString()方法。在打印對象時候,默認打印當前對象name
下面一個例子:打印數 min至max 的平方數。