Wenn man eine Programmiersprache zu lernen beginnt ist oft das erste
Programm das man schreibt ein "Hallo Welt" Programm.
Um sich also allen anderen anzupassen, ist die erste Übung in diesem
Handbuch eine Hallo Welt Übung!
Als Voraussetzung für die Übungen sollte man bereits
angemessene Kenntnisse von PHP selbst haben. Die Übungen
sollen dazu dienen dem Benutzer zu veranschaulichen wie man
dann PHP-GTK benutzen kann und die dahinterstehenden Grundlagen
und Techniken und zu vermitteln.
In dieser Üung werden wir ein einfaches Fenster mit dem Text "Hallo
Welt" erstellen, dies wird Ihnen einen Überblick einer
grundlegenden PHP-GTK Anwendung geben.
Wir werden zunächst das Programm auflisten und es dann
Zeile für Zeile erklären.
Beispiel 1.1. PHP-GTK Hallo Welt Programm Listing
|
<?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");
gtk::main_quit();
}
function hello()
{
global $window;
print "Hello World";
$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();
?>
|
Beispiel 1.2. PHP-GTK laden
|
<?php
if(!class_exists('gtk')){
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
?>
|
Diese wenigen Zeilen prüfen ob die PHP-GTK Erweiterung
bereits geladen ist, wenn nicht wird sie geladen. Dies wird durch
den Befehl
dl('php_gtk.dll') unter Windows oder
dl('php_gtk.so') unter allen anderen Systemen
erledigt.
Beispiel 1.3. Die delete_event Funktion
|
<?php
function delete_event()
{
return false;
}
?>
|
Die
delete_event() Funktion ist als Handler (siehe
unten) für das
"delete-event" Signal
registriert. Sie gibt
false zurück um PHP-GTK zu
sagen dass es mit dem Erscheinen des Events weitermachen soll. Wenn die
Funktion
true zurückgeben würde, würde
PHP-GTK mit der Ereignisbehandlung hier aufhören.
Beispiel 1.4. Die shutdown() Funktion
|
<?php
function shutdown()
{
print("Herunterfahren");
gtk::main_quit();
}
?>
|
Die
shutdown() Funktion ist als Handler für das
shutdown Signal registriert. Die Funktion gibt
den Text
"Herunterfahren" an der Konsole
aus und ruft dann die statische Funktion
gtk::main_quit auf.
Beispiel 1.5. Die hello() Funktion
|
<?php
function hello()
{
global $window;
print "Hallo Welt!";
$window->destroy();
}
?>
|
Die
hello() Funktion ist als Handler für das
"clicked" Signal des Buttons registriert. Sie
globalisiert die
$window Variable so dass es auf die
Instanz von
GtkWindow weiter unten im Skript
zugreifen kann. Sie gibt den Text
"Hallo Welt!" auf der Konsole aus und
zerstört dann das Fenster, was wiederum das
"destroy" Signal auslöst.
Beispiel 1.6. Das Fenster aufbauen
|
<?php
$window = &new GtkWindow;
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
?>
|
Die nächsten vier Zeilen bauen das eigentliche Fenster der Applikation
auf. Zunerst erzeugen wir eine Instanz von
GtkWindow, wenn dies erfolgreich war rufen wir die
Funktion
connect() auf um die
shutdown Funktion als Handler für das
"destroy" Signal zu registrieren und die
delete_event Funktion als Handler für das
"delete-event" Signal. Zuletzt rufen wir die
Funktion
set_border_width() auf
um den Rahmen um die Instanz der
GtkWindow Klassse
zu setzen die wir gerade erstellt haben.
Beispiel 1.7. Erstellen des Buttons
|
<?php
$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);
$window->show_all();
?>
|
Diese drei Zeilen des Scriptes rufen die Funktion
gtk::main auf, diese weist PHP-GTK an das Fenster das
wir erstellt haben anzuzeigen und auf Benutzereingaben zu warten um
Ereignisse zu starten so dass die Callback Funktionen die wir zuvor
definiert haben aufgerufen werden und die verschiedenen Aktionen
ausgeführt.