プログラミング言語を習い始める時、最初のプログラムとしては、しばし
ば、'hello world'プログラムを書くことになります。そこで、慣例に習い、
このマニュアルの最初のチュートリアルでも'hello world'チュートリアル
を行います!
このチュートリアルでは、PHP自体に関してある程度理解していることを前
堤とします。チュートリアルは、ユーザにPHP-GTKそして、その背後にある
考え方と技術の使用方法に関するアイデアを与えることです。
このチュートリアルでは、シンプルなウインドウをを作成し、"Hello
World!"と表示します。
まず、プログラムリストを示してから、プログラムの各行について説明し、
PHP-GTKアプリケーションの基礎の基礎について概要を示します。
例 1.1. PHP-GTK Hello Worldプログラムのリスト
<?php
if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
function delete_event()
{
return false;
}
function shutdown()
{
print("Shutting down...\n");
gtk::main_quit();
}
function hello()
{
global $window;
print "Hello World!\n";
$window->destroy();
}
$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);
$window->show_all();
gtk::main();
?>
|
例 1.2. PHP-GTKをロードする
<?php
if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
?>
|
最初の数行では、PHP-GTK拡張モジュールが利用可能かどうかのチェックを
行い、利用可能でない場合にはロードします。これは、それぞれ、
Windows及びLinuxにおいて、
dl('php_gtk.dll');または
dl('php_gtk.so');命令により行われます。
例 1.3. delete_event() 関数
<?php
function delete_event()
{
return false;
}
?>
|
delete_event()関数は、
"delete-event"シグナルのハンドラ(以下を参照)
として登録されます。この関数は、
falseを返し、
PHP-GTKにこのイベントのデフォルトのシグナルハンドラを破棄するよう通
知します。この場合、デフォルトのシグナルハンドラは、
destroy()メソッドです。
この関数が
trueを返した場合、PHP-GTKはここでデフォ
ルトのシグナルハンドラの実行を中断する可能性があります。
例えば、ユーザがアプリケーションを閉じようとする際に確認を行うダイ
アログボックスを表示するといったように、destroy()の代わりとなるユーザ定義関数
を書く必要がある場合には、知っておくと良いでしょう。
"delete-event"シグナルを
destroy()メソッドに接続する
ためには、必ずしもfalseを返す必要はありません。
これは、この特別なシグナルがデフォルトでfalseを
返すためです。"destroy"シグナルが正しく処理
される限り、あるウインドウの"delete-event"
シグナルについて全く動作を指定しないことも可能です。
例 1.4. shutdown() 関数
<?php
function shutdown()
{
print("Shutting down...\n");
gtk::main_quit();
}
?>
|
shutdown()関数は、
"destroy"シグナルのハンドラとして登録されま
す。この関数は、コンソールに
"Shutting
down...\n"と出力し、この後、静的な関数
gtk::main_quit()をコールします。
例 1.5. hello()関数
<?php
function hello()
{
global $window;
print "Hello World!\n";
$window->destroy();
}
?>
|
hello()関数が、ボタンの
"clicked"シグナルに関するハンドラとして登録
されています。この関数は、変数
$windowをグローバ
ル変数としています。これは、この後のスクリプトコードで作成した、
GtkWindow のインスタンスにアクセスできるよう
にするためです。そして、コンソールにテキスト
"Hello
World"を出力した後、ウインドウでdestroy()メソッドをコールします。これ
は、
"destroy"シグナルを発生し、このシグナル
は、
shutdown()関数をコールします。
hello()関数が$window変数にア
クセスできるようにするための他の方法は、
カスタムパラメータ
として変数を渡すことです。
例 1.6. ウインドウを設定する
<?php
$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
?>
|
次の4行でウインドウ自体を設定します。まず、
GtkWindowのインスタンスを生成します。
これに成功した後、
"destroy" シグナルのハンド
ラとして
shutdown()関数、
"delete-event"シグナルのハンドラとして、
delete_event()関数を登録するために、
ウインドウからconnect()
メソッドをコールします。最後に、
set_border_width()関数を
コールし、作成した
GtkWindowのインスタンスに
10ピクセル幅の境界線を設定します。
例 1.7. ボタンを設定する
<?php
$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);
$window->show_all();
?>
|
このスクリプトの3行のコードは、ボタンを生成し、設定します。
上のコードの最初の行では、
GtkButtonウイジェッ
トの新規インスタンスを生成します。コンストラクタへの引数は、ボタン
に表示したいテキストです。この場合のテキストは、
"Hello World!"です。この後、
"clicked"シグナルのハンドラとして前に定義し
た
hello()関数を登録するために
connect()メソッドをコールし
ます。最後に、
$windowに含まれる
GtkContainerのメソッド
add()をコールすることによ
り、前に作成したウインドウにボタンを追加します。
この後、
$windowに含まれるものを全て(そして、子ウ
イジェットの
$button)
show_all()メソッ
ドをコールすることにより、そして、
GtkWindowのインスタンスから表示します。
スクリプトの最後の行では、static関数
gtk::main()をコールします。これは、インターフェ
イスの設定が終了したことと、前に定義したコールバック関数がコールさ
れ、様々なアクションを行うためのユーザの相互作用により発生するイベ
ントを監視するメインループを開始することができることを通知します。