PHP分類文章 顯示方式:簡文 | 列表

2009年11月26日

PHP 5.3/6 新增功能 - Closures, const, and others

PHP 5.3 新增特性列表與本部落格的系列文章:

  • 名稱空間 (Namespace)
  • 延遲靜態繫結 (Late Static Bindings)
  • 新的魔術方法, __callStatic and __invoke.
  • 標記跳躍, Support for jump labels (limited goto) has been added.
    就是 goto ,忘了它吧。
  • HTTP 串流轉接器(HTTP stream wrapper) 現在將狀態碼 200 到 399 視為成功執行。我不曉得為什麼這會列在新功能中。這看來是為了改善 RESTful service 的支援。
  • 支援巢狀的例外處理。
  • 加入一個垃圾收集器,預設開啟。嗯... PHP 沒有垃圾收集功能嗎?Ok, 原本的垃圾回收機制清潔力不夠。 目前大多數 PHP 程式架構是處於一次性消耗的無狀態環境下,基本上我們都假設程式跑完後行程就自動結束,而行程中配置的資源也會被作業系統回收。 在這種情形下設計出來的 PHP 程式碼,直接搬到 application container 架構執行時,會出現資源佔用不放的問題。 所以這功能應該是為了將來發展 PHP 的 application container 而強化的機制。
  • 閉包、匿名函數(native Closures)(Lambda/Anonymous functions)。
  • 新的即席文件語法(Nowdoc syntax)。
  • 關鍵字 const 現在可用於類別定義之外。
  • 三元運算子(?:)有縮寫形式。

關於 Closures (匿名函數), Const, Nowdoc 等新功能,將於本文中說明。

...繼續閱讀

2009年11月24日

PHP 5.3/6 新增功能 - Namespace

Namespace 是 PHP5.3 面向大型專案開發所新增的一項重要功能。並不是說有了 Namespace 就萬事大吉,但至少在結合來自各路好漢的函數庫與功能框架時,不必太擔心名稱衝突的問題了。

PHP 以 namespace 關鍵字指示名稱空間,此指令兼具定義與切換空間的意義。名稱空間的命令方式與一般符號相同,並以 \ (斜線) 作為名稱空間(namespace)的分節符號。它借用檔案系統的目錄樹觀念劃分常數(const)、函數(function)與類別(class)等定義的存在空間 (注意,名稱空間並不支援變數。所有的變數都存在於同一個空間)。

...繼續閱讀

Posted by shirock at 樂多Roodo!0:20回應(0)引用(1)
標籤:PHP5.3,namespace

2009年11月22日

PHP 5.3/6 新增功能 - New magic methods

There are two new magic methods, __callStatic and __invoke.

PHP5.3 起新增了魔術方法 __invoke()。 簡單說,就是 C++/C# 中的 operator() 運算子重載。 還新增了魔術方法 __callStatic(),專門負責調用靜態方法。

...繼續閱讀

Posted by shirock at 樂多Roodo!23:42回應(0)引用(1)
標籤:magic method,function object,PHP5.3

PHP 5.3/6 新增功能 - Late Static Bindings

PHP5.3/6.0 新增延後靜態繫結(late static bindings)功能。 此功能由關鍵字 static 實現,係對照 self 之功能而出現。

self 關鍵字採用儘早靜態繫結策略,PHP 在解譯語法時,就直接將 self 繫結到它所在的類別。static 關鍵字採用延後靜態繫結(late static bindings)策略,要等到執行到那一段敘述時, PHP 才會根據調用者所屬類別來設定 static 所代表的類別。

...繼續閱讀

Posted by shirock at 樂多Roodo!23:31回應(0)引用(1)
標籤:late static bindings,PHP5.3

2009年11月11日

PHP的中介編程與反射能力示範

本文是我試探不同程式語言的中介編程與反射能力系列文章中的第二部份,關於 PHP 的內容。 基本上,我指的是 PHP5 。

PHP 雖然被認為是動態語言,但語法上卻又具有許多靜態語言的性質,這使得它被認為「不那麼動態」。 尤其它在引入 OOP 能力時,學了不少 Java 語言的方式,因此限制了 PHP 的表達能力。 例如 PHP 也將型別分成原始型別(primitive types)與個體型別,套用 Java 的 class 與 interface 語法, 功能相似的反射類別等等。儘管如此,PHP 還是具有一些 Java 語言沒有的能力,故能達到比 Java 語言更高的靈活度。所以在實作本文所需範例時,仍比 Java 語言簡單。

...繼續閱讀

2008年04月8日

PHPUnit 自定 TestSuite 輸出樣式,輸出為 HTML 網頁

Tags: phpunit tdd

PHPUnit 預置了一個純文字型式的 TextUI Runner,在大多數情形下,它足夠應付我們的需求。不過,當我想要把 TestSuite 放到專案網頁上,讓小組成員 - 特別是 PM - 可以上網查看立即的測試結果時,那個文字型式的 TextUI Runner 就顯得太簡略了。至少要把測試工作及結果輸出成 HTML 的條列式清單,最好還加上顏色區別成功或失敗。

所幸 PHPUnit 提供了良好的擴充性,要自定一個可以將測試內容輸出為 HTML 網頁的 HTML Runner 相當簡單。

...繼續閱讀

Posted by shirock at 樂多Roodo!10:37回應(1)引用(0)

2008年03月27日

延續《分割程式功能以及 mix-in 和 include》的討論

Tags: php mix_in

延續《分割程式功能以及 mix-in 和 include》的討論。tokimeki 說: 既然已經在外部定義了function,直接調用function不就好了嗎?

我直接委派函數的原因是 PHP 語法限制。用函數比用靜態成員函數(類別方法)或一般成員函數(個體行為)要容易寫。請看我在另一篇的回應: 這牽涉到 PHP 的動態能力限制。

...繼續閱讀

Posted by shirock at 樂多Roodo!13:51回應(5)引用(0)

2008年03月25日

如何替使用 CodeIgniter framework 開發的程式進行 PHPUnit3 的單元測試

Tags: CodeIgniter phpunit

先說一下 PHP framework 的事,我個人很想用 Zend Framework 。但我服務的公司的軟體是用 PHP4 開發的,所以主機也是跑 PHP4。由於遲遲不見有更新到 PHP5 的計劃,所以我現階是用 CodeIgniter framework 在寫新功能。

另一方面,我又習慣用 PHPUnit 進行測試工作。為此,我必須要弄一個簡單的測試框架出來,才能以 PHPUnit 去測試我用 CodeIgniter framework 寫的功能單元。

...繼續閱讀

Posted by shirock at 樂多Roodo!18:27回應(0)引用(0)

關於分割程式功能以及 mix-in 和 include

Tags: php reflection mix-in include
最近碰到一個分割程式功能的問題,不得已必須用到反映的功能,寫了一個簡單的抽象插件類別 http://blog.pixnet.net/HACGIS/post/15612808。 不知道你有沒有更好的解法? tokimeki

關於這個問題,我是用所謂「混成(mix-in)」的概念實踐。先前我寫過2篇: PHP 實踐 mix-in 概念PHP 實踐 mix-in 概念 part 2

另外一位網友是用 include ,參考: mix-in?。嚴格來說那不是 mix-n ,稍後說明。這有3個缺點。

...繼續閱讀

Posted by shirock at 樂多Roodo!17:59回應(6)引用(0)

2008年02月21日

Extend core libraries of CodeIgniter to detect the request file type and load applicable view

Tags: CodeIgniter

I extend core libraries of CodeIgniter to detect the request file type and load applicable view. The other way is use URI Route, see '文件格式之 URI Route Rule 與 CodeIgniter 之實作示範'.

What I want to do is that if user request 'http://localhost/ci/blogs/index.xml', it will try to load a view for XML. In other cases:

  • If request 'blogs/index', load 'views/index.php' to render HTML document (default type).
  • If request 'blogs/index.xml', load 'views/index.xml.php' to render XML document.
  • If request 'blogs/index.pdf', load 'views/index.pdf.php' to render PDF document.
  • and so on.
...繼續閱讀

Posted by shirock at 樂多Roodo!15:33回應(0)引用(0)
 [1]  [2]  [3]  [4]  [5]  [6]  [7]  [最終頁]