Make code sweet.PHP特殊用法的一些總結(1)
最近一個項目接近尾聲了,工作慢慢輕鬆了下來,閑暇時就看看一些PHP的架構和一些優秀的開源軟體中的代碼,一來可以借鑒一下其中的常用代碼和函數,二來通過閱讀別人的代碼瞭解一些平時不太常見的函數以及特殊用法。這些代碼都是針對PHP 5編碼的,這樣才能充分學習最新的特性。下面是我這段時間閱讀代碼的特殊用法的一些總結。
首先我們來說說PHP中的文法糖,在複雜的PHP應用中,一般都趨向於使用MVC架構,或者通用的,或者自己造新的,為了美觀易用都少不了撒上一點文法糖。以下內容會有用。
1.魔法方法,讓對象更豐富一點
PHP5新增了幾個魔法方法,其中一些方法可以讓對象執行其不存在的方法和擷取不存在的屬性。這個特性應該是最家喻戶曉的進階用法,如果你不知道,可以查看PHP Manual裡Overloading這一節。
__call and __callStatic
在執行對象的不存在的方法時觸發,原型如下:
mixed __call ( string $name , array $arguments )mixed __callStatic ( string $name , array $arguments )
__set and __get ,__isset and __unset
在操作不存在的對象屬性時觸發,原型如下:
void __set ( string $name , mixed $value )mixed __get ( string $name )bool __isset ( string $name )void __unset ( string $name )
2.讓數組物件導向一點
stdClass
有時候我們希望通過對象方式訪問元素,那可以用stdClass,它類似於閹割的使用對象方式->訪問元素的array,鄙人感覺使用它完全是追求視覺上的感覺和少打兩個字元,不過話說回來,這些在編程美學上也是很重要的不是嗎?
從Array轉stdClass,可以遍曆數組自己添加。從stdClass轉Array,可以使用函數get_object_vars來擷取。
最常見使用它的例子就是mysql_fetch_object和json_decode。
3.讓數組‘無處不在’
曾經看帖有人說PHP是面向數組編程,細細想來不無道理,PHP中的數組操作十分強大方便,數組操作主要包括[]操作符,foreach,和count函數,想讓你的類也擁有這些功能,當然可以,實現如下介面吧。
ArrayAccess
實現該介面可以讓對象支援[]操作,原型如下:
ArrayAccess {/* Methods */abstract public boolean offsetExists ( string $offset )abstract public mixed offsetGet ( string $offset )abstract public void offsetSet ( string $offset , string $value )abstract public void offsetUnset ( string $offset )}
Iterator
實現該介面可以讓對象支援foreach,原型如下:
Iterator extends Traversable {/* Methods */abstract public mixed current ( void )abstract public scalar key ( void )abstract public void next ( void )abstract public void rewind ( void )abstract public boolean valid ( void )}
這個介面相對比較複雜,在於foreach操作中介面函數的執行順序。簡單來說就是:rewind/next->valid->current->key,具體可以參看PHP Manual中相關部分,這部分寫的很清楚的。
Countable
實現該介面可以讓對象支援count函數,原型如下:
Countable {/* Methods */abstract public int count ( void )}
今天就先總結到這裡,日後我準備繼續寫session處理,autoload,錯誤處理等相關內容的一些總結綱要,以強化自己的記憶,方便日後查詢。
我的微博地址:http://weibo.com/jameren,歡迎大家關注, 。
順便做個廣告:
引用
我最近使用了15G超大空間免費網路隨身碟―@酷盤,可在PC及手機上使用,無檔案類型及大小限制,傳輸速度快,檔案永不丟失,一起來體驗吧!通過下面的邀請連結註冊,你和我都將額外獲得256MB的酷盤空間! http://t.cn/aNLZje
1 樓 liuzhiqiangruc 2011-07-10
不錯,PHP5的一些特性確實能讓PHP更優雅,看起來更物件導向