想要對對象的屬性進行一些設(shè)置,如果一個一個設(shè)置,會比較麻煩,這時可以使用對象的處理器函數(shù)__get()和__set(),不過使用這兩個方法的前提,屬性需要是protect或private的,如下例:
實例代碼如下:
__set()和__get()方法是針對protect或private屬性的,這樣可以做到在外界不能直接訪問屬性,而通過public定義的__set()和__get()方法卻可以輕易訪問它,同事這兩個方法對屬性的操作通用性也比較高,也可以限制對象的屬性的合法性,只有屬于$__data數(shù)組中的屬性,才可以進行設(shè)置,可以防止外界直接對屬性進行設(shè)置.但是使用__set()和__get()也有些不足之處.第一,這兩個方法只會捕捉私有或受保護的屬性,即是外界沒有訪問權(quán)限的屬性,這樣php會報一個致命錯誤;第二,這兩個方法破壞了屬性的繼承性.如果父對象中有一個__set()方法,而在子類中又實現(xiàn)了自己的__get()方法,那么對象就不會正常的運行,因為父對象的__get()方法是永遠調(diào)不到的,而且要想檢測重寫的屬性是否存在也不能得到的,因為它不會調(diào)用__get()方法.見到有人通過實現(xiàn)__isset()和__unset()來解決上面的問題.代碼如下:
實例代碼如下:
使用__isset()和__unset()則能保證屬性是否真正存在,不過這兩個方法只有在PHP5.1后才有效.