PHPでGUI用の拡張モジュール を試してみた。

高木です。おはようございます。

相変わらずPHPでWebをやらずに、邪道に走っています。
実際にはWebに使うこともないわけではないのですが、ブログではあくまでもこの路線で突っ走ります。

さて、今回は「GUI用の拡張モジュール」です。

いつだったかからマニュアルに掲載されていたので、以前少し試したことがありました。
今回、PHPのバージョンを7.1.2に上げるにあたって再度試してみたので、少しだけ使用感をレポートしたいと思います。

まずは手順にしたがってphp_uiをインストールします。
今回はWindows(64ビット)のマルチスレッド非対応版を使用しました。

3つのDLL(php_ui.dll、libui.dll、pthreadVC2.dll)をextフォルダにコピーし、extension=php_ui.dllをphp.iniに追加します。
phpを実行すると「指定されたモジュールが見つかりません」と警告が出ますが、とりあえずスルーします。

php_uiにはいくつかのサンプルプログラムが入っているので、それらを動かしてみるとちゃんと動くではないですか!

以下はgallery.phpを実行した画面です。

凝った部品こそありませんが、これだけあれば基本的なことは一通りできそうです。

他にもいくつかサンプルがありました。
次のようにたくさんの星が流れるアニメーションのサンプル starfield.php というのもありました。

残念ながら、starfield.phpを×ボタンで終了しようとするとphpが異常終了してしまいます。
ほかにもsnake.phpという簡単なゲームのようなサンプルがあるのですが、それも異常終了してしまいました。

アニメーションが関係するものがよくないのでしょうか?
何らかの回避方法があるのかもしれませんが、今回はあまり深く追求していません。

このphp_uiの実体は、libuiというC++で書かれたライブラリです。
C++で書かれてはいますが、APIはCのようです。
それをいろいろな言語にバインディングするということでしょう。

PHPへのバインディングは、クラスのメソッドをオーバーライドすることでイベントハンドラを定義する、要するに古くさい設計になっています。
この辺はまったく好みではないのですが、我慢ならないほどではありません。

このようなGUIツールキットを試すとき、必ず調べるのは日本語のインライン入力ができるかどうかです。
Tcl/Tkなんかも以前は日本語のインライン入力ができなかったのですが、ある方がインラインパッチを作成されて、それが本家に取り込まれた経緯があります。
FLTKなんかはシンプルなので使いたくもなるのですが、日本語のインライン入力ができないのでどうしても採用できなかったりします。

このphp_uiというよりlibuiもきっとダメだろうと思っていたのですが、なんと! 日本語のインライン入力に対応しているではないですか。
これで俄然やる気が出てきました。

これならPHPのGUIだけに留めておくのはもったいないので、C++でGUIを作るときにも是非使ってみたいと思います。