PHP通常是做為伺服器端指令碼執行,如果告訴你PHP可以編寫普通的GUI程式,你應該高度興趣.下面介紹的PHP-GTK就是PHP的GUI擴充.GTK是一個業界標準的圖形庫,具有良好的移植性.如果你用過linux的gnome案頭環境,對它應該不會陌生,Gnome就是在KDE遇到Qt許可證障礙後發展的自由軟體,GTK則是其採用的圖形庫。
PHP-GTK採用的是組件思想(可見組件思想幾十年前就有了),為此不能不提到tcl/tk語言。
Tcl/Tk 的發明人 John Ousterhout 教授在八十年代初,是伯克利大學的教授。在其教學過程中,他發現在整合電路 CAD 設計中,很多時間是花在編程建立測試環境上。並且,環境一旦發生了變化,就要重新修改代碼以適應。這種費力而又低效的方法,迫使 Ousterhout 教授力圖尋找一種新的程式設計語言,它即要有好的代碼可重用性,又要簡單易學,這樣就促成了Tcl (Tool Command Language) 語言的產生。TCL經常被用於 快速原型開發,指令碼編程,GUI和測試等方面。
Tcl 最初的構想的是希望把編程按照基於組件的方法 (Component Approach),即與其為單個的應用程式編寫成百上千行的程式碼,不如尋找一個種方法將程式分割成一個個小的, 具備一定“完整”功能的,可重複使用的組件。這些小的組件小到可以基本滿足一些獨立的應用程式的需求,其它部分可由這些小的組件功能基礎上產生。不同的組件有不同的功能,用於不同的目的。並可為其它的應用程式所利用。當然, 這種語言還要有良好的擴充性, 以便使用者為其增添新的功能模組。最後,需要用一種強的,靈活的“膠水”把這些組件“粘”合在一起, 使各個組件之間可互相“通訊”,協同工作。程式設計有如拼圖遊戲一樣,這種設計思想與後來的 Java 不謀而合。終於在1988 年的春天, 這種強大靈活的膠水 - Tcl 語言被發明出來了。
按照 Ousterhout 教授的定義,Tcl 是一種可嵌入的命令指令碼化語言 (Command Script Language)。“可嵌入”是指把很多應用有效,無縫地整合在一起。
說起來也很類似於現在炒做的很熱鬧的.NET,.NET有一個IL,中繼語言,你可以用合適的語言做組件,通過IL實現模組的銜接和重用。說白了,微軟這個思想就是借鑒了十幾年前的tcl/tk,只不過微軟有錢可以做得更好而已。
這種結構的先進性不言而喻,有好的代碼可重用性,簡單易學,有良好的擴充性,可重用,執行效率比單純的指令碼高,功能也更強,解釋語言,代碼能夠動態改變,平台無關。Win32, UNIX, Mac 上都可以跑,代碼緊湊,易於維護調試簡單等等。這種方式為後來很多指令碼語言採用,如python,perl 等,php指令碼的天性也非常適合做這種擴充,php-gtk只是其擴充的一種。
PHP-GTK創始人Andrei Zmievski 回憶了 PHP-GTK 計劃和建立的過程:
“我總是對 GUI 編程有著濃厚的興趣。我發現 Gtk+ 是一個非常好的工具包。目睹了 PyGtk 和 GTK-Perl 的實現,我決定嘗試 PHP 是否也能夠被做成 Gtk+ 的介面。2000年8月,我有了更多的業餘時間,於是我開始實驗。我參考了 PyGtk 的實現方法,因為它有著相當完全的實現和漂亮的物件導向的介面。James Henstridge,PyG 的作者,在最初的籌備階段提供了極大的協助。
“手工寫 Gtk+ 函數全部的介面幾乎是不可能的事情,所以我把重點放在了代碼產生上,就像 PyGtk 做的一樣。代碼產生器是一個PHP 程式,它可以讀取包含 Gtk+ 類、常量和方法資訊的一系列的 .defs 檔案並產生與 PHP 相介面的 C 代碼。無法自動產生的部分可以提交到 .overrides 檔案。
“代碼產生器和基礎結構的工作花了我一定的時間,因為我在 2000 年秋天這段時間裡只能花很少的時間在 PHP-GTK 上。在我把 PHP-GTK 給 Frank Kromann 示範過後,他產生了濃厚的興趣,並開始協助我完成代碼產生器和 Win32 的實現。當我們寫了第一個 Hello World 程式並設法使之工作之時,我們的喜悅之情溢於言表。兩個多月後,這個工程初見成效,並於 2001 年 3 月 1 日發布了組建。
“感到 PHP-GTK 前景廣闊,我便為它專門設定了郵件清單和 CVS 知識庫。同時,gtk.php.net 網站也建立起來。”
一個簡單的執行個體,更多的看安裝包裡面的 Demos。php-gtk 官方網站為 http://gtk.php.net,有線上手冊供查詢。目前 php-gtk 最高版本是 PHP-GTK2,還在進一步完善中。
可以從 http://gtk.php.net/download.php 下載一個完整的運行和測試軟體包,在命令列下運行:
php demosxxx.php
就可以測試裡邊帶的示範程式。
相信第一次看到示範的人一定會大吃一驚:原來 PHP 真能開發 Win32 的 GUI 傳統型程式呀!
以下是一個樣本,儲存成名為 mydemo.php 檔案到 demos 檔案夾中,運行命令:
C:phpgtk2>php demosmydemo.php
就會彈出一個小視窗,可以用滑鼠拖拽改變它的大小,點擊上面的按鈕,視窗就關閉,然後在 DOS 視窗裡輸出“Hello World!”字串。
function destroy()
{
Gtk::main_quit();
}
function hello()
{
global $window;
print "Hello World! ";
$window-> destroy();
}
//建立一個GtkWindow
$window = &new GtkWindow();
//將 "destroy " signal用connect() 方法串連到shutdown函式
$window->connect("destroy", "destroy");
//建立一個GtkButton,按鈕文字為 "按我 "
$button = &new GtkButton( "Click Me ");
$button-> connect("clicked", "hello");
//把GtkButton放到是container的GtkWindow中
$window-> add($button);
//顯示$window以及它的所有child widget
$window-> show_all();
//進入程式主迴圈(即程式啟動之意)
gtk::main();
?>
網眼測試感言:
PHP 能做到這一步著實讓人很感慨!但感慨之後,又覺得怪怪的。
首先是 PHP 在 Web 開發上的大行其道,遮掩了其案頭開發方面的光亮--還算不上光輝。而 PHP 在 Web 開發特別是網站開發方面,雖然早已經是業界老大,但其名分則一直是老三、老四的位置。這時,再談案頭開發,則覺得是“不務正業”了。
事實是,PHP-GTK 這個 PHP 分支是發展非常緩慢的,截至2010年8月份,其最近一次更新已經是2年半以前了。要麼是資金困擾、要麼是人力困擾、要麼是看不到商業前景,總之這個項目隨時都要胎死腹中的樣子,好像一陣微風都能吹滅它。
案頭開發,流行的是 VC++、Delphi、Winform(C#/VB.NET)、再勉強算上Java,好像根本沒 PHP 什麼事。本人覺得,既然借用的是 Linux 下的 GTK 庫,去 Linux 下發展豈不是更好,為何非要往 Windows 這扇窗戶裡鑽呢?PHP、Python的文法都有點怪異,不知道習慣了 VC++ 的人喜歡不喜歡?要說個人喜好,我還是最喜歡 C#,它吸收了 C/C++、JAVA等語言的優點,文法純正、符合習慣,能同時開發 Webform 和 Winform 程式,應該是前途無量的。
http://www.bkjia.com/PHPjc/486265.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/486265.htmlTechArticlePHP通常是做為伺服器端指令碼執行,如果告訴你PHP可以編寫普通的GUI程式,你應該高度興趣.下面介紹的PHP-GTK就是PHP的GUI擴充.GTK是一個業界標...