這篇很久之前就想寫了,不過畢竟用到的機會很少,這裡只是暫時先記下來。
PHP 能不能寫 Windows 應用程式呢?答案是可以的,像是 PHP-GTK 等等。不過我對 PHP-GTK 的印象仍停留在它是跨平台的 GUI 介面,而且我也很少研究。所以這裡要介紹的是兩個算是 PHP 在 Windows 平台視窗化的先驅 (我所知道的?) : WinBinder 和 PPForm 。
WinBinder
官方網站:http://www.hypervisual.com/winbinder/
說明
第一次得知 WinBinder 是在小企鵝的 TIM ,那時候看到小企鵝介紹時,就覺得:「哇!真厲害! PHP 也能寫出這麼好的視窗介面!」
WinBinder 屬於 PHP 的一個 client side extension ,因此不適用於 Web 開發。它包裝了許多 Windows 的 API ,讓我們能夠在 PHP 程式裡透過函式呼叫。
在 0.3x 版時, WinBinder 有公開一些給 PHP 5 用的物件導向 API ,不過在 0.4x 版我就沒看到了,必須要到舊文件資料堆裡面翻。
安裝
我下載的是 0.43 (alpha) - build 164 自動安裝檔,用它安裝會方便許多。執行後,安裝程式會幫你下載 Minimal PHP (最小化的 PHP 執行環境) ;接著進行一連串的複製後,就大功告成了,而且安裝程式也會幫你註冊 .PHPW 的副檔名以對應到 PHP 。
然後記得開啟檔案總管,由上方的選單上依「工具 / 資料夾選項 / 檔案類型 / PHPW 檔案類型 / 進階 」的順序找到「編輯檔案類型」的對話框。再對「 Open 」指令按下「編輯」,把原來的
1
| |
改成
1
| |
這樣才會以 Minimal PHP 的 PHP.INI 設定作為執行環境。
如果想手動安裝的話,請參考我在 TIM 發表的 WinBinder 安裝方法 (僅適用於 0.3x 版, 0.4x 版因為目錄結構不同,所以要舉一反三) 。
範例
我們可以在 C:\WinBinder\phpcode\examples 找到很多 WinBinder 的範例,其中最簡單的是 minimal.phpw :
1 2 3 4 5 6 | |
首先我們要載入 WinBinder 的函式庫,它幫我們預先了許多建立視窗元件的函式。
1
| |
接著我們用 wb_create_window 建立了一個 480x320 的視窗,其標題為「 Hello Word! 」。
1
| |
最後用 wb_main_loop 來讓程式等待使用者的操作。
1
| |
接著點兩下 minimal.phpw ,如果環境設定正確的話,它就會被執行,畫面如下:
這是最簡單的 WinBinder 程式, examples 中還有許多令人激賞的例子可供參考。不過 WinBinder 控制元件大多是利用函式來建立的,這對習慣使用視覺化開發的人,這樣的寫法可能會有點難以接受。
其他的資訊除了官方網站外,你可以到 TIM 的 WinBinder 討論區去看看。
PPForm
官方網站:http://ppform.com/
說明
我忘了是在哪裡看到 PPForm 這個開發平台,剛巧最近在 PHP 5 知識交換中心又看到有人討論,便興起記錄它的念頭。
「PPForm 是一套 PHP 在視窗上的 RAD 開發平台」,因為它看起來 (且用起來) 就像是 VB 或是 Delphi 的 IDE 介面!剛啟動時,我嚇了一跳!這世界上怎麼會有人做出這種 PHP 的 IDE 介面,簡直令人匪夷所思。不過稍作研究之後,才發現它已經把 PHP 和視窗開發這兩者緊密地結合在一起。
由於官方網站看起來像是國人架設的,為了要有比較完整的介紹,所以我冒昧地寫信去請教作者一些有關 PPForm 的資訊,沒想到作者竟然很快給我答覆,真是太感動了 (這也是我為什麼 PPForm 會寫得比 WinBinder 還多的原因) 。在與作者的兩次信件往來之後,我開始對 PPForm 有較為深入的瞭解。
我猜想的沒錯, PPForm 的作者徐績先生的確是台灣人,在 Delphi 和 PHP 上都有相當深入的研究;不過我對 Delphi 較無研究,很遺憾對他不甚熟悉。
作者徐先生是基於以下的理由而開發出 PPForm 的:
- 簡化 Delphi 過於嚴謹的語法, 將不必要的 Delphi 語法去除。
- 為了某些作業目的,提供架構上的支援,增加開發的速度。如支援 ActiveForm (ActiveX for IE) 。
- 選擇 PHP 作為 PPForm 的使用語言,是因為PHP 的直譯速度快, 支援完整。
- 為了整合 PHP 與 Delphi 相關資源。GTK 的相關元件,過於簡單,不如 Delphi 元件完整 (換句話說, Delphi 的元件可用在 PPForm 上面) 。
作者將來的目標是想將 PPForm 發展成為組織型態,讓大家一起來維護與開發 PPForm ;我想這對有興趣在 Windows 上研究 PHP 的朋友是一大福音。
安裝
PPForm 基本上會朝向綠色軟體的目標邁進,不過目前作者還是提供了一個安裝程式以便使用者安裝。雖然 PPForm 用到了 PHP ,但是它已經內建了好了 PHP 執行環境;不像 WinBinder 要另外下載 PHP 核心 (這是因為實作方向不同) 。
我用的是 PPForm 1600b2 版,當下載完成後只要雙擊 setup.exe 後,再依照畫面指示操作即可完成安裝。不過作者提供了以下的步驟,可以讓我們在沒有安裝程式時自行修改相關設定:
- 先複製所有檔案到指定目錄,例如「 C:\Program Files\PPForm 」。
- 接著修改 C:\Program Files\PPForm\php.ini ,確定存取路徑正常:
所以在沒有安裝程式的情況下,只需修改上述路徑;而目前 PPForm 只用到前二項的設定。
1 2 3 4
include_path = "C:\Program Files\PPForm\inc;." extension_dir = "C:\Program Files\PPForm\ext" eaccelerator.cache_dir = "C:\Program Files\PPForm\tmp\cache" upload_tmp_dir = "C:\Program Files\PPForm\uploadtemp" - 建立 .pxp 關聯至 mar.exe (Runtime Environment) ,這樣就能直接執行 PPForm 所建立的程式。
- 建立桌面及啟動連結。
和 WinBinder 的 .phpw 類似, PPForm 建立的程式是 .pxp 。如果你用文字編輯器打開它們,就會發現它們其實就是 PHP 程式。
範例
這裡我原本打算參考官網上的 Flash Demo ,然後自己作一個簡單的的範例教學。不過作者卻直接提供我一個製作的步驟,真是非常用心。 (感動 T__T 這就是身為台灣人的驕傲…)
所以我把作者給的製作步驟加上圖片,輔以我的旁白說明。
首先我們先開啟 PPForm 的 Designer ,如下圖,真的有夠給它像 VB 的 (應該像 Delphi … 可是我沒看過 Delphi 的 IDE) 。
接著用「檔案 / 新表格」來建立一個 PHP Form , Designer 會自動幫我們開啟三個 Form 出來,首先是 Layout 視窗:
接著是屬性視窗:
然後是程式碼檢視視窗:
簡直就和 VB 或 Delphi 這種視覺開發環境一模一樣!
當然這些操作介面我就不詳述了,現在請按一下 Standard 頁籤上的 Button 元件,然後在 Layout 視窗上點一下,以佈置一個按鈕: (目前 PPForm 還不支援拖曳)
點一下剛剛佈置上去的 Button1 元件,這時你可以在屬性視窗上更改它的屬性 (也可按 F11 切換) 。這裡我把它的 Caption 屬性改成「 Hello World! 」。
接下來點兩下剛剛的 Button1 元件,我們會跳到程式碼檢視視窗上,而且 PPForm 會像 VB 一樣自動幫我們建立 Button1 Click 事件的處理函式骨架。
其實 .pxp 本身是個 PHP 類別檔,其類別名稱為 __PPForm__ ,而它繼承自 TPPForm 這個類別。而很重要的一點是,這個 __PPForm__ 類別所產生的實體就是我們在執行時期的看到的 Layout 視窗,因此在它上面的元件就會被視為這個類別的屬性。換句話說,我們如果要取得 Button1 這個物件實體,要用以下的方式:
1
| |
其中 $this 就是指 __PPForm__ 這個類別所產生的物件實體。
現在我們在 Button1Click 中輸入:
1 2 | |
完成後按下 F9 或主要視窗上的三角形執行鈕,就會出現一個應用程式視窗:
按一下中間的按鈕,就會跳出一個訊息視窗:
是不是很簡單呢?當然這些只是 PPForm 小小的應用,較複雜的例子可以參考官方首頁上的 Flash Demo 。
而以後要執行這個程式,也不必再開啟 PPForm 的 Designer ;只要 .pxp 檔有正確關聯到 mar.exe 的話,我們只要點兩下該 .pxp 檔,就能再次執行我們剛剛所寫好的程式。
截至目前為止, PPForm 還有許多特點仍在開發中,因此執行上可能會有些許問題。不過作者也向我說明這些問題其實是將來想完成的功能雛形,因此我想 PPForm 一定還有很大的進步空間。
心得
我曾經以為 PHP 在 Windows 上只能夠使用 GTK 來開發 GUI 介面,但是 WinBinder 和 PPForm 的出現讓我瞭解 PHP 其實在包裝之後,也能和 Windows 底層的 API 溝通,進而創造出功能實用的 Windows 應用程式。個人比較推崇 PPForm ,因為它不僅採用了物件導向寫法 (接近 .NET 的寫法) ,而且還有 IDE 可用 (WinBinder 的 Layout Editor 還在開發中) 。而兩者都需要在欲安裝的 Client 端建立執行環境,這點我想往後應該可以用安裝程式來解決。
雖然目前這兩個套件的成熟度 (包含文件、資源等) 還無法和 MS.NET 或其他大廠的開發平台比較;但是我相信經由這些開發者無私的努力,這些平台在未來一定能夠在 PHP 的程式開發上佔有一席之地。