ホームページ  >  記事  >  バックエンド開発  >  PHP-GTK2 を使用して Win32 GUI プログラムを作成する_PHP チュートリアル

PHP-GTK2 を使用して Win32 GUI プログラムを作成する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:39:55876ブラウズ

    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 网站也建立起来。”

簡単な例です。インストール パッケージのデモをさらにご覧ください。 php-gtk の公式 Web サイトは http://gtk.php.net で、クエリに関するオンラインマニュアルがあります。現在、php-gtk の最上位バージョンは PHP-GTK2 ですが、現在もさらに改良が続けられています。

http://gtk.php.net/download.php から完全な実行およびテスト ソフトウェア パッケージをダウンロードし、コマンド ラインから実行できます:

phpdemosxxx.php

付属のデモプログラムをテストできます。

初めてデモを見た人は驚かれると思います。PHP で本当に Win32 GUI デスクトップ プログラムを開発できることがわかりました。

以下は例です。mydemo.php という名前のファイルをデモ フォルダーに保存し、コマンドを実行します。

C:phpgtk2>php demosmydemo.php

小さなウィンドウが表示され、マウスでドラッグしてサイズを変更できます。ウィンドウが閉じ、DOS ウィンドウに「Hello World!」という文字列が出力されます。

関数破壊() 関数 Hello () {
Global $ Window;
Print "Hello World! ";
$window->destroy();
->connect("destroy", "destroy");

// ボタンを含む GtkButton を作成します"クリックしてください"

$button = &new GtkButton( "クリックMe ");
$button-> connect(" clicked", "hello");
//コンテナである GtkWindow に GtkButton を入れます
$window-> add($button);
//表示$window とそのすべての子ウィジェット
$window-> show_all();
// プログラムのメインループに入ります (プログラムの起動を意味します)
gtk::main();
?>

メッシュテストのコメント:

PHP でこれができるのは本当に感動的です!しかしため息をついた後、また変な気分になった。
まず第一に、Web 開発における PHP の人気は、デスクトップ開発における PHP の輝きを覆い隠しています - それは輝かしいものでさえありません。 Web 開発、特に Web サイト開発に関しては、PHP は長らく業界のリーダーであり続けてきましたが、その地位は常に 3 位か 4 位でした。現時点で、デスクトップ開発について話すと、「自分たちの仕事がきちんとできていない」と感じます。
実際のところ、PHP-GTK の PHP ブランチは非常にゆっくりと開発されています。2010 年 8 月の時点で、その最後の更新は 2 年半前です。資金の問題があるか、人材の問題があるか、あるいは事業の見通しがないかのいずれかです。つまり、このプロジェクトは、風が吹けば消えてしまうかのように、いつでも死産するでしょう。
デスクトップ開発の場合、一般的なものは VC++、Delphi、Winform (C#/VB.NET) で、Java はほとんど数えられず、PHP は関係ないようです。 Linux で GTK ライブラリを借用しているのであれば、Linux で開発したほうが良いのではないかと思います。なぜ Windows のウィンドウをドリルスルーする必要があるのでしょうか? PHP と Python の構文は少し奇妙ですが、VC++ に慣れている人には気に入るでしょうか。個人的な好みで言えば、私は C/C++、JAVA、その他の言語の利点を吸収しており、Webform と Winform のプログラムを同時に開発できるのが一番好きです。明るい未来を。



http://www.bkjia.com/PHPjc/486265.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/486265.html

技術記事

PHP は通常、サーバーサイド スクリプトとして実行されます。PHP で通常の GUI プログラムを作成できると言われれば、PHP の GUI 拡張である PHP に興味を持つはずです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。