Forum und email

Hello World (初級)

新しいプログラミング言語を学ぶ際に最初に書くプログラムは、 たいてい 'hello world' です。そこで、皆さんのご期待にこたえて、 このマニュアルでも最初のチュートリアルとして 'hello world' をとりあげます!

このチュートリアルの前提条件として、PHP 自身についての概要は知っているものとします。 このチュートリアルでは、PHP-GTK の使用法およびその背景となる概念や技術を扱います。

このチュートリアルでは、単純なウィンドウを作成してそこに "Hello World!" というテキストを表示します。

まずはプログラムのリストをご覧に入れます。それから、 プログラムの各行について説明していきます。 これによって、基本的な PHP-GTK アプリケーションについての概要がつかめるでしょう。

例 2.1. 単純な Hello World スクリプト

<?php
if (!class_exists('gtk')) {
    die("Please load the php-gtk2 module in your php.ini\r\n");
}

$wnd = new GtkWindow();
$wnd->set_title('Hello world');
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));

$lblHello = new GtkLabel("Just wanted to say\r\n'Hello world!'");
$wnd->add($lblHello);

$wnd->show_all();
Gtk::main();
?>

もし Fatal error: Call to undefined function: connect_simple() というエラーが出たら、あなたが使用しているのは PHP-Gtk1 であり、 PHP-Gtk2 ではありません。このマニュアルは PHP-Gtk1 のものではありません。

このコードをテキストエディタにコピーし、 hello.phpw という名前で保存しましょう。 次に、コンソールを開いて php hello.phpw でプログラムを起動します。"Hello world" というタイトルのウィンドウが開き、 "Just wanted to say 'Hello world!'" というテキストが表示されることでしょう。

例 2.2. PHP-GTK が使用可能かどうかのチェック

if (!class_exists('gtk')) {
    die("Please load the php-gtk2 module in your php.ini\r\n");
}

PHP-GTK が使用可能であることを確認するため、 gtk クラスが存在するかどうかを調べます。 PHP 4 および PHP-GTK 1 の場合と違い、PHP-GTK モジュールを dl() で読み込もうとしてはいけません。この方法は PHP 5 では非推奨となっており、 新しく作成するコードでは使用してはいけません。 つまり、ここでできるのはメッセージを表示することだけです。 モジュールが使用できないことを知らせた上で、 ユーザ自身にモジュールを有効にしてもらう必要があります。

例 2.3. ウィンドウの作成

$wnd = new GtkWindow();

新しい window ウィジェットを作成する方法は、 単にオブジェクトのインスタンスを作成するだけのことです。 変数 $wnd に、新しいオブジェクトが代入されます。 PHP 4 で PHP-GTK 1 のプログラムを書いたことがある人は、 new の前に & がないことにお気づきになるかもしれません。これは PHP 4 では必須でしたが、 PHP 5 ではもはや使用されません。自動的に参照が作成されます。

例 2.4. ウィンドウのタイトルの設定

$wnd->set_title('Hello world');

タスクバー内でウィンドウを識別しやすくするため、タイトルを設定します。 単にオブジェクトのメソッドをコールするだけです。

例 2.5. 正常に終了できるようにする

$wnd->connect_simple('destroy', array('gtk', 'main_quit'));

ちょっと見慣れないコードが出てきました。これにより、 "destroy" シグナルが 静的メソッド Gtk::main_quit と関連付けられます。これは、ウィンドウが 閉じられた/破壊された 場合に GTK のメインループを終了させるようにします (メインループについてはもう少し後で説明します)。

例 2.6. テキストを表示するラベルの作成

$lblHello = new GtkLabel("Just wanted to say\r\n'Hello world!'");

先ほど、新しいウィジェットを作成しました。 そこにちょっとしたテキストを表示させるようにしましょう。このような場合に最適なのが GtkLabel です。

例 2.7. ウィンドウへのラベルの追加

$wnd->add($lblHello);

これで、ウィンドウに対してラベルを直接追加します。

例 2.8. ウィンドウの可視化

$wnd->show_all();

ここまでの段階では、画面には何も表示されません。 ウィンドウを表示するには、show() をコールする必要があります。 これでウィンドウが表示されますが、ラベルは表示されません。ラベルの show() もコールしなければならないのです。 ウィンドウ上にボタンやチェックボックスなどのウィジェットを複数配置している場合、 これでは不便です。show_all() を使用すると、ウィンドウおよびその配下のすべてのウィジェットを表示させます。

例 2.9. メインループの開始

Gtk::main();

全設定が終了したら、ウィンドウを表示したままにしておき、 ユーザの操作に反応させる必要があります。 通常の PHP スクリプトはこの時点で終了してしまいますが、 ここではスクリプトを実行し続けなければならないのです。 そのためには、GTK のメインループを作成する必要があります。 このループがアプリケーションを実行し続け、ユーザのイベントを待ち受けます。 イベントが発生すると、対応するコールバック関数にそれを委譲します。

次に進む道

これで初めての PHP-GTK 2 アプリケーションができあがりました。 おそらく、次はもっと複雑なレイアウトを作成したくなることでしょう。 その基礎を学ぶには、 パッキングのチュートリアル を参照ください。