PHP 5.4 新功能
Traits
多年前,我在《PHP 實踐 mix-in 概念之可行性》中嘗試著用 PHP 實現「Mix-in (混成)」能力。現在,PHP 5.4 終於提供了這個功能,它稱為「Traits」。
PHP Traits 嚴格說來僅及 Ruby Mix-in 一半的功力。例如我當年在《PHP 實踐 mix-in 概念 part 2 - MixableClass》實作的 MixableClass 所具有的動態增刪方法的能力,Traits 便做不到。Traits 目前僅提供靜態的混成。儘管如此,對大多數的程式人員而言,Traits 仍然是相當強大的語言能力,可以讓我們更有效地組織演算法,又避免多重繼承的陷阱。
先以《PHP 實踐 mix-in 概念之可行性》的範例程式來看,現在用 Traits 的寫法將如下所示:
更多關於 Traits 的內容,請詳閱《PHP 手冊:Traits》。
內建 Web 伺服器
哇,這真是令人興奮的新功能。雖然目前還只建議用於開發測試階段,但仍比以往還要自己裝 Apache 方便了。對於習慣在 Windows 平台上撰寫 PHP 程式後再上傳的程式人員來說,這個新功能免去了在 Windows 上安裝 Apache 的負擔。測試時也更方便了,只要在專案的工作目錄執行 PHP 內建 Web 伺服器,就可以進行專案的功能測試。不用放在 Apache 的公開網頁路徑下。
對了,PHP 內建 Web 伺服器還提供了 router 功能。我可以指定一個 PHP 程式負責安排 URL 的路徑。這個 router 實際上就是一些 PHP framework 的 index.php 。例如我自己寫的 CommonGateway 框架,就可以做為 PHP 內建 Web 伺服器的 router ,簡直是絕配啊。真是太妙了。
請詳閱《PHP 手冊:Built-in web server》。
其他
除了以上兩個特別顯著的功能外,PHP 5.4 還增加了一些新的語法。 新增語法讓一些程式碼變得更簡潔易讀,或是讓本來不能寫成一行的語法變成可以一行寫完。
以下列出我以往曾經抱怨 PHP 語法不支援,但這次新增的語法項目:
- 陣列縮寫語法:
我終於可以少打「a, r, r, a, y」這5個英文字母了。現在可以用[ ]
來定義一個陣列。傳統寫法:array(1 => 'abc')
;新縮寫法:[1 => 'abc']
。 - 二進位數字表示法:
可用0b
為前綴,表達一個二進位數字,例如0b001010
。 - 調用類別方法時,方法名稱支援以變數表達。例如
MyClass::$method()
。 - 允許類別實體化後直接存取其成員。以前要寫兩行的動作:
$tmp = new foo; $tmp->bar();
;現在可以寫成一行:(new foo)->bar();
。
完整異動內容,請詳閱《Change Log》。
這些新語法與原有語法沒有任何衝突。至於 PHP 5.4 移除掉的語法,我個人很久以前就沒在用了,完全沒影響,就不列出了。
樂多舊回應